PHP-FPM 池停止响应并且无法重新启动

PHP-FPM 池停止响应并且无法重新启动

我在 Nginx 后面以 PHP-FPM 的形式运行 PHP。偶尔其中一个池会停止响应请求。似乎 nginx 正在接受连接,并将其传递给 PHP-FPM,但 PHP-FPM 却没有给出响应。该池的所有请求都会发生这种情况,包括那些通常应该运行得非常快的请求。

我已为慢速 PHP-FPM 启用日志记录。通常,这会提供在达到慢速日志时间时调用了哪些函数的堆栈跟踪,但在慢速日志中我看到:

[08-Jun-2014 16:40:49]  [pool imagick] pid 16825
script_filename = /home/github/imagick-demos//imagick/index.php
[0x00007fa70269c1c8] +++ dump failed

在 PHP-FPM 日志中我看到:

WARNING: [pool imagick] child 17502, script '/home/github/imagick-demos//imagick/index.php' (request: "GET /index.php") executing too slow (10.459610 sec), logging
NOTICE: child 17502 stopped for tracing
NOTICE: about to trace 17502
ERROR: failed to ptrace(PEEKDATA) pid 17502: Input/output error (5)
NOTICE: finished trace of 17502

即,导致速度缓慢的原因的追踪失败了。

其他 PHP-FPM 池响应良好。奇怪的是,仅重新启动 PHP-FPM 似乎无法解决这个问题。然而,当它刚刚发生时,我做了以下事情:

  1. 多次重新启动 PHP-FPM 但没有效果。
  2. 禁用Xdebug和OPCache,并重新启动PHP-FPM。
  3. 重新启用Xdebug和OPCache,并重新启动PHP-FPM。

此后,池开始再次正常响应。我用 strace 监控 PHP-FPM,那里没有任何明显的阻塞或故障。

什么原因导致 PHP-FPM 出现这样的阻塞?

相关内容