一旦池达到 pm.max_children,Nginx 就会在尝试向 PHP-FPM 发送新请求时开始超时。“最大侦听队列”在 php-status 页面中始终为 0。
以下是 php-fpm 池的示例:
[example]
catch_workers_output = no
; Configure listener
listen = /var/run/php-fpm/example.sock
listen.backlog = 65535
listen.owner = nginx
listen.group = nginx
; Unix user/group of processes
user = nginx
group = nginx
; Choose how the process manager will control the number of child processes.
pm = ondemand
pm.max_children = 10
pm.max_requests = 200
pm.process_idle_timeout = 30s
pm.status_path = /status
; Pass environment variables
env[HOSTNAME] = $HOSTNAME …Run Code Online (Sandbox Code Playgroud) 我们有一个中等流量的站点(大约每天 20,000 次点击),在 Apache 2.2、Ubuntu 9.10 服务器上运行一个 PHP/MySQL 应用程序,来自 Amazon EC2 c1.small 实例(1.7 Gb 的 RAM)。
我们遇到了网站反复无响应的问题。作为一个肮脏的黑客,我将 MaxClients/ServerLimit 设置为 450。
<IfModule mpm_prefork_module>
KeepAlive On
KeepAliveTimeout 7
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 450
ServerLimit 450
MaxRequestsPerChild 0
</IfModule>
Run Code Online (Sandbox Code Playgroud)
该网站似乎比以前更长,但仍然死亡。检查进程列表,我有(第三列是物理内存,第四列是虚拟大小):
xxxxxxxxx@domU-XXXXXXXXX:/etc/apache2$ ps -eo pid,user,rss,vsz,args | grep apache
2333 root 11092 39084 /usr/sbin/apache2 -k start
3704 www-data 11060 41292 /usr/sbin/apache2 -k start
3826 www-data 10016 39844 /usr/sbin/apache2 -k start
3954 www-data 11976 41612 /usr/sbin/apache2 -k start
4061 www-data 11844 41668 /usr/sbin/apache2 …Run Code Online (Sandbox Code Playgroud)