如何让 php-fpm 在它的子进程闲置一段预定义的时间后杀死它们?

如何让 php-fpm 在它的子进程闲置一段预定义的时间后杀死它们?

我有几个低流量的 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

相关内容