Назад | Перейти на главную страницу

Ограничение использования памяти и минимизация перебоев подкачки в Unix / Linux

У меня есть несколько машин, которые я использую для выполнения большого количества заданий, где я пытаюсь ограничить количество заданий, чтобы не превышать доступную оперативную память машины. Иногда я неправильно оцениваю, сколько памяти потребуется для выполнения некоторых заданий, и машина начинает обрабатывать файл подкачки. Я решил это, отправив kill -s STOP на одну из рабочих мест, чтобы ее можно было заменить.

Кто-нибудь знает об утилите, которая будет отслеживать сервер для процессов по определенному имени, а затем приостанавливать работу с наименьшим объемом памяти, если общее потребление памяти достигает желаемого порога, чтобы более крупные из них могли запускаться и завершаться как минимум файл подкачки сбивается? Затем приостановленные процессы необходимо возобновить после завершения некоторых существующих процессов.

Посмотри на трэш-защита (демон, написанный на Python)

  • он не делает именно то, что вы хотите, но он идентифицирует поведение подкачки на всем сервере, затем пытается идентифицировать процессы, вызывающие это, и отправляет им сигнал STOP, чтобы заморозить их.
  • затем позже он отправляет сигнал CONT, чтобы разморозить их.

Если вы не хотите использовать это как есть, это может быть основой для пользовательского сценария, который приостанавливает процесс с наименьшим объемом памяти.

Делаем это вручную

Для тех, кому не нравится автоматизированный инструмент, вы можете просто использовать htop найти процессы с самым высоким процентом использования памяти и отправить им сигнал STOP с kill -s STOP <pid>. Потом вы можете отправить kill -s CONT <pid> возобновить их. Однако вам, возможно, придется долго ждать выполнения htop и kill, когда сервер перегружается.

Эта проблема

Когда машина перегружается из-за нехватки памяти, вы обычно видите очень низкую пропускную способность, несмотря на низкую загрузку ЦП.

Чтобы диагностировать это:

  • требуется ли десятки секунд или даже минут, чтобы запустить простую команду оболочки?
  • в top или htop, существует ли широкое использование подкачки, высокая средняя нагрузка и низкая загрузка ЦП?
  • есть ли высокие ставки обмена / свопаута? Бегать vmstat 1 и ищи si и so значения, особенно числа от 2 до 4 цифр каждую секунду, без секунд замены нуля.