PHP FPM 状态正在完成但从未完成

PHP FPM 状态正在完成但从未完成

我们在 Ubuntu 14.04 上运行一个 Symfony 应用程序,使用 Nginx 和 PHP-FPM

问题是单个 PHP FPM 偶尔会挂在我们的生产服务器上。

我有来自状态页面的输出:

pid:                  13416
state:                Finishing
start time:           08/Sep/2014:12:35:29 +1000
start since:          10548
requests:             3
request duration:     158138427297
request method:       GET
request URI:          /app.php?searchText=Search+term&page=2
content length:       0
user:                 -
script:               /var/projects/site_path/app.php
last request cpu:     0.00
last request memory:  0

我不明白为什么这个过程挂起了。

如果我跟踪该过程,它只是循环如下:

# strace -p 13416
gettimeofday({1410154710, 385743}, NULL) = 0

我已经检查了 Nginx 访问日志并匹配了请求,并且请求没有问题,它返回了 200,并且使用该 url 无法复制任何错误)。

任何帮助将不胜感激

访问日志:

172.30.12.110 - - [08/Sep/2014:12:35:29 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "/search?searchText=Search+term" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:35:32 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:34 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11169 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:51 +1000] "GET /search?searchText=OSearch+term&page=3 HTTP/1.1" 200 11158 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=2" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:36:50 +1000] "GET /profile/ HTTP/1.1" 200 8108 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=4" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko

答案1

事实证明,在某些情况下,我们使用了无效的 Memcached 密钥。这导致 Memcached 无错误地死机,而 PHP 进程仍保持活动状态。

答案2

在我们的例子中,我们已使用 Unix 域套接字和连接重用 (enablereuse=on) 配置了 mod_proxy_fastcgi,但是正如 lkraav 在评论中提到的那样https://github.com/icing/mod_h2/issues/62

# UDS does not currently support connection reuse

这就是导致 FPM 子进程堆积在完成状态的原因。删除连接重用解决了这个问题并大大稳定了系统。

答案3

既然你说 fpm 挂了,你应该查看 fpm 日志而不是 nginx。在 php-fpm.config 中打开 slow_log 和调试日志。还可以尝试使用不同选项的 strace 来查看更多信息。也许它与特定的 php 函数有关

相关内容