我有几个低流量的 vhost 应用程序,我想在同一个盒子上运行它们,使用类似这样的配置:
[example.com]
listen = /tmp/example.com.socket
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
user = www-data
group = www-data
pm = dynamic ; scale children according to this rule
pm.max_requests = 1000 ; respawn child after so many requests
pm.max_children = 12 ; cap the total number of children thus
pm.start_servers = 6 ; children created at daemon boot
pm.max_spare_servers = 2 ; maximum number of idling children
pm.min_spare_servers = 1 ; minimum number of idling children
pm.status_path = /php_pool_example.com_status
request_terminate_timeout = 30s
request_slowlog_timeout = 20s
slowlog = /var/www/com/example/logs/php-slow.log
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_flag[display_errors] = off
php_admin_value[error_log] = /logs/php_err.log
php_admin_flag[log_errors] = on
运行正常,只是我不确定如何让子进程“空闲”,以便 php-fpm 将其杀死。我看到的问题是,随着我添加更多应用程序,每个应用程序都会有大约 6 个空闲的 php-fpm 子进程,毫无理由地占用 RAM。现在,request_terminate_timeout
由于时间过长,将杀死一个子进程要求,但由于长期缺乏请求,未能生下孩子。手动的定义如何表示空闲子进程过多或过少,但在指定时处于安静状态。如果我测量到 30 分钟内未处理请求的 php-fpm 子进程应被视为“空闲”并被终止,我该如何将此情况告知 php-fpm?
答案1
php-fpm 的下一个稳定版本应该支持ondemand
可以扩展和缩小子进程的调度程序。到目前为止,还没有补救措施。
答案2
我只想报告,截至今天,ondemand
一切运行正常。使用 ondemand,您可以设置pm.start_servers = 0
停止空闲进程:
pm = ondemand
pm.start_servers = 0