nginx + PHP-FPM(7.0)在某些请求上挂起

nginx + PHP-FPM(7.0)在某些请求上挂起

我在使用 Symfony2 构建的 nginx + PHP-FPM 托管 Web 应用程序时遇到了一个奇怪的问题。基本上,时不时地,就会有一个请求未得到处理,而浏览器则显示它正在等待开始接收(chrome 中的轮子逆时针旋转)。

错误日志中没有任何内容可以帮助我识别问题,无论是应用程序日志本身(Symfony 2.8),还是 nginx 或 php-fpm 日志。

奇怪的是根本没有超时,这表明 php-fpm 甚至没有收到该请求(对吗?)。

也许有人曾经遇到过这样的问题并且知道可能的原因?

如果我提供任何看似相关的内容(配置文件?),请随时在评论中询问。

答案1

我有同样的问题。我发现如果进程没有完成,那么就没有日志条目。因此请求进入 nginx 并被中继到上游 php-fpm。php-fpm 没有响应,nginx 使上游超时。php-fpm 继续运行。所以我看到随着时间的推移,进程逐渐增加,卡在 flock() 调用中。查看堆栈,我发现这是由于尝试获取调试文件上的文件锁。我建议您检查 php-fpm 的打开文件以查看是否有任何挂起或正在运行。lsof |grep php-fpm然后使用stracegdb进一步调试问题。

就我而言,我使用独占锁调用 file_put_contents,但出于某种原因,PHP 有时无法获取该锁,因此就永远挂起了。

回溯

0 0x00007f03f7081a67 in flock () from target:/usr/lib/libc.so.6

1 0x000055db7b9ecae6 in ?? ()

2 0x000055db7b9e83ad in _php_stream_set_option ()

3 0x000055db7b93e78e in ?? ()

4 0x000055db7badf0a3 in execute_ex ()

5 0x000055db7bae6fad in zend_execute ()

6 0x000055db7ba34c65 in zend_execute_scripts ()

7 0x000055db7b9cfb89 in php_execute_script ()

8 0x000055db7b7a1543 in ?? ()

9 0x00007f03f6fbaf4a in __libc_start_main () from target:/usr/lib/libc.so.6

10 0x000055db7b7a230a in _start ()

答案2

嗯,NGINX 很棒,尽管它不能开箱即用。您需要进行一些调整。您到目前为止做了什么?

看看这个简单的指南。除了这里描述的参数外,还有许多其他参数:https://www.nginx.com/blog/tuning-nginx/

Backlog 队列工作进程保持连接 HTTP2

还有更多... 就我而言,我曾经遇到过这样的问题,我通过增加队列限制(Backlog Queue)解决了这个问题

相关内容