php fpm 的“优雅重新加载”实际上意味着什么?

vir*_*ius 3 php-fpm

php-fpm 手册页指出对 USR2 信号的响应是:“优雅地重新加载所有工人 + 重新加载 fpm conf/二进制文件”。但是,在测试中,我发现重新加载实际上会杀死处理请求的工作人员。我期待在进程被杀死并重新产生之前允许请求完成。

这是坏的,我的期望错误,还是测试无效?

我的测试设置:
Ubuntu 16.04 LXC 容器
安装 php7.0-fpm 和 nginx
php 脚本以睡眠并输出倒计时每秒
通过curl
问题重新加载发送睡眠请求 30 秒systemctl

测试结果:
重新加载时请求立即被杀死

vir*_*ius 5

我刚刚找到我的答案:配置选项process_control_timeout设置为默认值 0 秒。在我看来,这是一个可怕的默认。

我设置process_control_timeout为值30s以允许子进程在被强行杀死之前最多 30 秒完成并退出。但是,这仅在后续重新加载时生效,因为需要第一次重新加载才能使此更改生效。

  • 我必须使用“5s”而不是“5”,即使配置文件说秒是此选项的默认单位。 (3认同)