Контроль памяти процесса Linux?

Добрый день. И сразу к сути:


— Есть сервер, на котором, конвертируется видео, и выполняется туева хучу php-скриптов, отжирая переодически или в купе много памяти. Изза чего системе- нужные сервисы падают от нехватки памяти (sshd, httpd, nginx, postgresql, monit, syslog). Пару раз была panic'а


А теперь внимание вопрос:


— Чем контролировать? Как ограничивать — кол-во разрешаемой памяти на процесс? Как сделать так, чтобы при превышении лимита памяти, падал процесс съедающий, а не системе- нужные сервисы.
  • Вопрос задан
  • 7273 просмотра
Пригласить эксперта
Ответы на вопрос 7
@EaS
Попробуйте man ulimit. Вроде он для этого и нужен, хотя лично я не пользовался никогда.
Ответ написан
NetBear
@NetBear
cgroups
cgroups (control groups) is a Linux kernel feature to limit, account and isolate resource usage (CPU, memory, disk I/O, etc.) of process groups.
Ответ написан
iandriyanov
@iandriyanov Автор вопроса
Подскажите а есть ли инструмент, управления всем этим? ulimit очень узкий, и расчитан на процессы создаваемые пользователем, а не системой.
К примеру *.php — 200mb памяти не смотря на то что 200mb уже установлено в php.ini.
И так далее.
Ответ написан
huankun
@huankun
Можно воспользоваться top с ключом -b и парсить вывод shell/python/… скриптом, после чего делать kill нужному процессу.
Ответ написан
@non7top
Есть такая штука как oom adjust, она контролирует то в каком порядке процессы будут убиваться. К сожалению по умолчанию этот механизм в большинстве случаев работает антилогично, убивая системные службы по паре мегабайт, вместо того чтобы убить процесс, который съел большую часть памяти.
В upstart и возможно systemd есть некоторые механизмы для использования этого параметра, но мне кажется что удобнее использовать один из доступных в интернете скриптов, которые вручную выставляют приоритеты процессам в системе на основе конфигов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы