Ограничение использования памяти и минимизация использования свопа в Unix / Linux
У меня есть несколько машин, которые я использую для выполнения большого количества заданий, где я пытаюсь ограничить количество заданий, чтобы не превышать доступную оперативную память машины. Иногда я неверно оцениваю объем памяти, занимаемый некоторыми заданиями, и машина начинает уничтожать файл подкачки. Я разрешаю это, отправив kill -s STOP
на одном из рабочих мест, чтобы он мог быть заменен.
Кто-нибудь знает утилиту, которая будет отслеживать сервер на наличие процессов с определенным именем, а затем приостанавливать ту, которая занимает наименьший объем памяти, если общее потребление памяти достигает желаемого порога, так что большие могут работать и завершаться с минимумом подкачка файла подкачки? Приостановленные процессы должны быть возобновлены после завершения некоторых существующих процессов.
1 ответ
Взгляните на thrash-protect (демон написан на Python)
- он не делает то, что вам нужно, но он идентифицирует поведение перестановки на всем сервере, затем пытается определить процессы, вызывающие это, и отправляет им сигнал STOP, чтобы заморозить их.
- затем он посылает сигнал CONT, чтобы разморозить их.
Если вы не хотите использовать это как есть, это может быть основой для пользовательского сценария, который приостанавливает процесс с наименьшим объемом памяти.
Делать это вручную
Для тех, кто не любит автоматизированный инструмент, вы можете просто использовать htop
найти процессы с самым высоким процентом использования памяти и отправить им сигнал STOP с kill -s STOP <pid>
, Тогда позже вы можете отправить kill -s CONT <pid>
возобновить их. Тем не менее, вам может потребоваться долгое время, чтобы htop и kill выполнялись при перегрузке сервера.
Эта проблема
Когда машина зависает из-за нехватки памяти, вы, как правило, видите очень низкую пропускную способность, несмотря на низкую загрузку ЦП.
Чтобы диагностировать это:
- Требуется ли десятки секунд или даже минут для запуска простой команды оболочки?
- в
top
или жеhtop
, широко ли используется своп, высокая загрузка и средняя загрузка процессора? - Существуют ли высокие показатели обмена / обмена? Бежать
vmstat 1
и искатьsi
а такжеso
значения, особенно от 2 до 4 цифр каждую секунду, без секунд с заменой на ноль.