nginx
在使用with 的设置中PHP-FPM v5.3.3
,我注意到 nginx 的错误日志中经常出现以下错误:
Feb 16 15:00:22 mymachine www.example.com 2015/02/16 15:00:20 [error] 20254#0:
*1448249 readv() failed (104: Connection reset by peer) while reading upstream
[...]
查看该php-fpm.log
文件,我注意到以下几点:
[16-Feb-2015 15:00:20] NOTICE: [pool www] child 22279 exited with code 0 after
47983.681002 seconds from start
[16-Feb-2015 15:00:20] NOTICE: [pool www] child 10625 started
这就是pm.max_requests
配置指令所设置的工人回收。
我(合理地)假设 PHP-FPM 会在回收工作者之前正确处理任何接受的连接/请求,因为这项任务并不意味着任何类型的紧急情况。
- 是配置错误吗?
- 这是 PHP-FPM 5.3.3 的缺陷吗?
- 这是所有版本的PHP-FPM的缺陷吗?
答案1
- 不,它是有效的。
- 可能是。您确实应该考虑至少升级到最新的 5.3.x,但最好升级到最近的 5.x,因为 5.3.x 不再受支持。
- 不。我在所有版本上都使用了这样的配置。此外,设置
pm.max_requests
是一种常见的做法。
可能是你只需要运行很少的 worker。你应该真正调查繁忙和正在运行的 worker 的数量,php-fpm 有一个内部资源,pm.status_path
你可以使用 wget 或任何其他 http 客户端查看其中的内容:
[root@sol etc]# wget -O - -q http://localhost/status
pool: www
process manager: dynamic
start time: 29/Jan/2015:11:36:20 +0300
start since: 1633615
accepted conn: 996160
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 34
active processes: 1
total processes: 35
max active processes: 18
max children reached: 0
slow requests: 0
它说我有一个活动进程和一个空闲进程 - 因此一切正常。繁忙进程的数量最多为 18 个,因此从一开始一切正常。