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