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

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

4 Solutions collect form web for “Приостановка / возобновление одиночного процесса на / с диска”

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

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

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

 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 
  • Что такое «автоматическое расширение стека»?
  • Как создать дерево процессов?
  • Почему разветвленные процессы иногда появляются с помощью скобок вокруг их имени в ps?
  • Возвращаемое значение процесса и сравнение номера
  • Почему нет простого способа перечислить все процессы в данной группе процессов?
  • Возможно ли поддерживать несколько процессов без поддержки виртуальной памяти?
  • Предотвращение доступа SIGINT к дочерним процессам
  • Родная и не родная поддержка потокового / процесса программирования в Linux?
  • Как узнать максимальное использование памяти в процессе?
  • Как получить фактическое использование памяти процесса (включая данные в swap)
  • Суммировать использование памяти во всех процессах программы?
  • Interesting Posts

    Отправка двоичных данных в get ()

    Отсутствует 1 MiB перед первым разделом и после последнего раздела во время секционирования с разделенным

    `command` vs` type` – найти файл программы в PATH пользователя

    Создайте точку доступа для «моста» между двумя беспроводными соединениями. Как должен выглядеть / etc / network / interfaces?

    Как я могу загружать 2 (или более) дистрибутивы Linux с gummiboot и UEFI?

    Добавить записи grub2 в Ubuntu

    Squid не блокирует не-ascii domans

    Как отключить SSLv2 в OpenSSH?

    Переменные среды по блоку ssh в сценарии оболочки

    Поиск местоположения сертификата SSL путем подключения к порту

    Обоснование найти отображение команды. каталог

    Если используется старый MBR и уже есть 3 первичных раздела, как я могу создать еще два раздела с «parted»?

    Расширение GLX отсутствует на дисплее «localhost: 10.0»

    Внутренние переменные контекста Linux: что происходит, когда процесс завершается до прерывания таймера?

    Как начать сервис в systemd сразу после cryptsetup?

    Linux и Unix - лучшая ОС в мире.