Ранее у меня была проблема "нехватки памяти". Я просто оставил верх открытым, и он замер на экране справа, так как закончилась память. У меня есть один пользователь в списке с примерно 50 экземплярами "php". как ограничить количество экземпляров, открываемых PHP? или количество экземпляров PHP, которые разрешено использовать одному пользователю? почему он использует так много экземпляров PHP? это сайт WordPress.
По сути, конфигурация php-fpm по умолчанию использует больше оперативной памяти, чем у вас есть. Вам необходимо настроить PHP-FPM так, чтобы он не исчерпывал ресурсы, согласно руководству вроде вот этот.
sudo nano /etc/php/7.0/fpm/pool.d/www.conf
Вам необходимо решить, какой тип PM использовать. Прочитайте это. ondemand обычно подходит для серверов с низким объемом памяти, которые получают небольшой трафик. Я думаю, что я использую динамический для своего основного пула PHP, поскольку он поддерживает несколько процессов PHP всегда доступными и ожидающими обслуживания запроса, а затем по запросу для моего тестового пула PHP, который редко используется. ondemand означает большую задержку, поскольку необходимо запустить процесс php, но для сайтов с меньшим объемом это, вероятно, нормально.
Конфигурация может выглядеть примерно так, если у вас мало памяти и низкий трафик.
pm = ondemand
; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 5
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
;pm.start_servers = 2
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
;pm.min_spare_servers = 1
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
;pm.max_spare_servers = 3
; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
pm.process_idle_timeout = 60s;
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
pm.max_requests = 50
Если вы получаете более высокий трафик, вам может быть лучше использовать динамический и настроить значения, чтобы у вас было достаточно серверов, работающих в пределах имеющихся у вас ЦП / ОЗУ.
PHP 5.6
На моем AWS t2.nano у меня два пула. Вот определения моего динамического пула, который обслуживает производственные запросы.
Файл: /etc/php-fpm-5.6.d/www.conf
pm = dynamic
pm.start_servers = 2
pm.max_children = 4
pm.start_servers = 2
pm.max_spare_servers = 2
pm.min_spare_servers = 1
pm.max_requests = 25
Вот мой тестовый пул, который предназначен для моего тестового сервера, к которому я редко обращаюсь.
Файл: /etc/php-fpm-5.6.d/testpool.conf
pm = ondemand
pm.max_children = 2
pm.process_idle_timeout = 120s;
pm.max_requests = 50