我们正在使用Nginx和PHP-FPM在Ubuntu 14.04上运行Symfony应用程序
问题在于,单个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
事实certificate,我们在某些情况下使用了无效的Memcached密钥。 这导致Memcached没有错误地死亡,并且PHP过程保持活着。
在我们的例子中,我们使用Unix域套接字和连接重用(enablereuse = on)configuration了mod_proxy_fastcgi,但是正如lkraav在https://github.com/icing/mod_h2/issues/62上的评论所述:
# UDS does not currently support connection reuse
这就是导致FPMsubprocess堆积在最终状态的原因。 删除连接重用解决了问题,并大大稳定了系统。
既然你说fpm挂起,你应该看fpm日志而不是nginx。 打开slow_log并在php-fpm.config中debugging日志logging。 也尝试用不同的选项strace来看更多。 也许它涉及到一个特定的PHPfunction