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

Ограничить общее использование памяти PHP-FPM

Я использую PHP-FPM на своих серверах Debian. У меня вопрос об использовании памяти. Я могу установить memory_limit только внутри PHP, и он не должен быть слишком низким для некоторых запросов. Я также могу установить только количество процессов в PHP-FPM, и это тоже не должно быть слишком маленьким, поскольку я выполняю много запросов php.

В большинстве случаев процессы будут использовать около 2-20 МБ. Предел процесса составляет 512, так что это примерно 5-10 ГБ ОЗУ. Но поскольку некоторые скрипты php могут использовать намного больше памяти, максимально допустимая память составляет около 1 ТБ (512 процессов * 2048 МБ). И если что-то пойдет не так, Debian OOM Killer просто случайным образом завершит процессы.

Есть ли способ ограничить общее использование памяти для php-fpm? Как жесткое ограничение, при котором php-fpm не будет запускать больше процессов, потому что он исчерпан из общей оперативной памяти.

Несколько дней назад у меня была аналогичная проблема, когда пара мастеров php5-fpm порождала слишком много процессов. OOM Killer очень помог, убив nginx.

В качестве решения я нашел cgroup механизм с подсистема памяти. Это позволяет объединить все процессы FPM в одну группу, которая ограничена, например, 60% системной оперативной памяти.

Отличная документация: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch-Using_Control_Groups.html