На моем Linux-сервере есть несколько процессов серверного типа, которые используют 50 МБ ОЗУ. Они не используются постоянно, и я хотел бы иметь возможность запускать больше экземпляров, чем позволяет мой объем оперативной памяти. Я хочу иметь возможность удалить процесс из ОЗУ и переместить его в раздел подкачки диска. Предоставляет ли ядро Linux что-нибудь для точной настройки подкачки для каждого процесса?
Ядро Linux предоставляет через proc файловая система свойство, которое определяет, насколько агрессивно страницы памяти (только анонимные!) выгружаются на диск.
В vm.swappiness свойство применяется глобально для каждой системы, но не для каждого процесса. Установите низкое значение, если вы хотите, насколько это возможно, избежать подкачки. Если ваш системный процесс находится в спящем режиме в течение длительного времени, вы можете выиграть от агрессивного поведения подкачки, увеличив это значение.
Вы можете временно изменить его из интерфейса командной строки (он не переживет перезагрузку системы)
echo 90 > /proc/sys/vm/swappiness
Или настойчиво с добавлением этой строчки в /etc/sysctl.conf
vm.swappiness=90
И применяя это с
sysctl -p
Или можно сделать его более детальным с помощью cgroups и объем памяти подсистема, если ваша система работает на новейшем ядре Linux (начиная с версии 2.6.24?!?). Предположим, у вас есть иерархия cgroup с объем памяти подключенная подсистема (/ cgroups / mem) и cgroup (/ cgroups / mem / your_cgroup) с определенными задачами / процессами (/ cgroups / mem / your_cgroup / tasks). Затем вы можете изменить обмен поведение для этой группы задач следующее:
cd /cgroups/mem/your_cgroup
echo 90 > memory.swappiness
Для получения дополнительной информации о подсистеме памяти вы можете прочитать, например, Руководство по ресурсам RedHat.
Вы не умнее подсистемы виртуальной машины ядра. Просто оставьте процессы в покое, и если они действительно останутся неиспользованными, они будут заменены, и вам не придется ничего делать.