Я использую 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