PHP-FPM max_requests 参数导致 502

PHP-FPM max_requests 参数导致 502

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 会在回收工作者之前正确处理任何接受的连接/请求,因为这项任务并不意味着任何类型的紧急情况。

  1. 是配置错误吗?
  2. 这是 PHP-FPM 5.3.3 的缺陷吗?
  3. 这是所有版本的PHP-FPM的缺陷吗?

答案1

  1. 不,它是有效的。
  2. 可能是。您确实应该考虑至少升级到最新的 5.3.x,但最好升级到最近的 5.x,因为 5.3.x 不再受支持。
  3. 不。我在所有版本上都使用了这样的配置。此外,设置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 个,因此从一开始一切正常。

相关内容