Иногда нам хотелось бы приостановить процессы с интенсивным использованием памяти на наших серверах Ubuntu и OS X, чтобы временно освободить часть оперативной памяти для других заданий. Если бы все, что нас беспокоило, это загрузка процессора, то все Ctrl-Z
было бы просто . Тем не менее, мы должны иметь возможность освободить ОЗУ (записав его на диск) и затем перезапустить процесс (диск -> ОЗУ) или, другими словами, «спящий» отдельный процесс. Любые подсказки о том, как это сделать? (Желательно из CLI.) Спасибо.
22
Ответы:
Не существует общего средства для гибернации одного процесса, только всей системы.
Однако, если вас не волнует, что образ процесса не выдержит перезагрузки, есть встроенная возможность сохранения образа процесса на диск: замена. Убедитесь, что у вас достаточно места подкачки, и если в памяти есть нагрузка, а процесс не активен (например, потому что он приостановлен), его память будет выгружена.
Если вы знаете, что процесс, вероятно, будет неактивен в течение длительного времени, и что в какой-то момент вам понадобится быстрое время отклика, вы можете вынудить освободить много ОЗУ, выделив много ОЗУ в кратковременный процесс, например
Вы не получаете никакого контроля над тем, что выгружается, поэтому другие процессы могут выгружаться. В Linux вы можете поменять процесс обратно, принудительно получив доступ к отображаемым страницам. Сценарий в этом ответе будет делать следующее: загружать в память все страницы, отображаемые процессом (обратите внимание, что это включает открытые файлы; вы можете выбирать регионы выборочно на основе информации карты, чтобы избежать обмена данными, которые, как вы знаете, вам не понадобятся) см. этот ответ для получения дополнительной информации).
источник
Вы ищете термин « контрольная точка приложения ».
Я знаю, что для этого можно использовать инструменты CryoPID и CryoPID2 .
Оба инструмента предназначены только для Linux.
Я не знаю аналогичного инструмента для BSD или OS X.
источник
Убедитесь, что у вас есть достаточно места подкачки. Убедитесь, что ваша система настроена на замену неактивных страниц ( vm.swappiness = 100 ). Тогда должно быть достаточно приостановить процесс. Ядро предпочтет поменять неактивные страницы.
источник
В Mac OS X вы можете попытаться использовать
purge
команду (поставляется с Xcode) для освобождения некоторого (неактивного) ОЗУ.источник
purge
не поможет здесь. Он удаляет дисковый кеш, но это не приведет к тому, что память процесса будет выгружена, и это не ускорит получение оперативной памяти другим процессом.