Intereting Posts
Могу ли я сделать окно alt-tab всегда отображаться на основном экране в Gnome? Невозможно установить Linux mint или загрузиться в live cd! : «Не найдена страница режима кэширования» неудовлетворительные зависимости от старой версии Ubuntu (10.10) Как получить обнаружение и исправление ошибок на одном жестком диске в Linux (с помощью btrfs или других методов) Должны быть авторизации для привилегий, и они все еще должны быть явно указаны или теперь включены в solaris. *? / bin / python3: нет модуля с именем pip Mutt в скрипте, не указан получатель – вложение, несколько получателей Как загрузить установочный носитель Arch Linux с включенной защищенной загрузкой? Как выбрать строки и выполнить команду форматирования? Отключить курсив в org-mode emacs, Ubuntu Amazon AWS (Amazon AMI), устанавливающий OpenVPN почему эта замена шаблонов не работает над массивом? Запуск кода без ssh в beaglebone black Как использовать bindfs для создания общей папки между окружением chroot и ее хостом Настройка USB-накопителя WLAN

Приостановка / возобновление одиночного процесса на / с диска

Иногда мы хотели бы приостановить процессы, интенсивные для памяти, на наших серверах Ubuntu и OS X, чтобы временно освободить некоторую ОЗУ для других заданий. Если бы все, о чем мы беспокоились, было использование ЦП, то работал бы простой Ctrl-Z . Тем не менее, мы должны иметь возможность освободить оперативную память (путем записи ее на диск), а затем перезапустить процесс (диск -> ОЗУ) или, другими словами, «спящий» один процесс. Любые подсказки о том, как это сделать? (Желательно от CLI.) Спасибо.

Нет общего средства для спячки одного процесса, только для всей системы.

Однако, если вам все равно, что образ процесса не сохранится при перезагрузке, есть встроенное средство для сохранения образа процесса на диск: замена. Убедитесь, что у вас достаточно пространства подкачки, и если есть давление памяти, и процесс неактивен (например, потому что он приостановлен), его память будет заменена.

Если вы знаете, что процесс, скорее всего, неактивен в течение длительного времени и что вам понадобится быстрое время отклика в какой-то момент, вы можете принудительно освободить большую ОЗУ, выделив много оперативной памяти в краткосрочный процесс, например

 perl -e '$tmp = "a" x 999999999' # allocate about 1GB 

Вы не получаете никакого контроля над тем, что поменяется, поэтому другие процессы могут быть заменены. В Linux вы можете поменять процесс обратно путем принудительного доступа к страницам, которые он отображает. Сценарий в этом ответе будет делать это: загружать в память все страницы, сопоставленные процессом (обратите внимание, что это включает открытые файлы; вы можете выборочно пересекать регионы на основе информации о карте, чтобы избежать обмена данными, которые, как вы знаете, вам не понадобятся , см. этот ответ для получения дополнительной информации).

Термин, который вы ищете, – это « контрольная точка приложения ».

Инструменты, которые я знаю, могут сделать это CryoPID и CryoPID2 .

Оба инструмента предназначены только для Linux.

Я не знаю подобного инструмента для BSD или OS X.

Удостоверьтесь, что у вас много свободного пространства. Убедитесь, что ваша система настроена на использование неактивных страниц ( vm.swappiness = 100 ). Тогда этого должно быть достаточно, чтобы приостановить процесс. Ядро предпочитает заменять неактивные страницы.

В Mac OS X вы можете попытаться использовать команду purge (предоставленную с помощью Xcode), чтобы освободить некоторое (неактивное) ОЗУ.

 vm_stat purge vm_stat