记录导致带有nginx的PHP-FPM超时的确切原因/代码块

记录导致带有nginx的PHP-FPM超时的确切原因/代码块,php,logging,nginx,Php,Logging,Nginx,我已经用nginx为一个相当分散的API设置了PHP-FPM。一切都很有魅力,直到它不起作用。大多数情况下,我观察到的错误与 2015/12/21 12:34:43 [error] 14113#0: *60938148 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 1.39.8.13, server: api.hlapp.com, reques

我已经用nginx为一个相当分散的API设置了PHP-FPM。一切都很有魅力,直到它不起作用。大多数情况下,我观察到的错误与

2015/12/21 12:34:43 [error] 14113#0: *60938148 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 1.39.8.13, server: api.hlapp.com, request: "POST /v2/hlapp/get-fun HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "api.hlapp.com"
问题是,我无法将代码段锁定在超时的地方。API调用与网络上的其他几个事物进行通信,其中任何事物的故障或延迟都可能导致此超时。 诊断此问题的最佳方法是什么?我们是否可以像在Java中那样进行更详细的故障日志记录

另外,我必须补充一点,我已经做了各种各样的事情,比如分析代码,等等。但是无法连接到微组件是不稳定的,并且在通常的分析中没有发现。它主要发生在生产中


所以,总而言之,我要找的是一个更详细的stacktrace,它能准确地告诉我代码超时的位置。

经过一番努力,我终于想出了一个解决方案。 这是受到Java编程范例的启发,在Java编程范例中,几乎每个实现良好的延迟生成端点都是可丢弃的或调用可丢弃的,并且每个已知的异常都被捕获和处理

因此,最好的解决办法可能是这样。对于发出的每个请求,确定通信通道,无论是DB查询、辅助API响应,还是可能导致PHP达到其
max\u execution\u timeout
limit的任何其他东西,在try catch中,将其设置为一个时间限制,然后“超时”。这逐渐有助于查明超时的原因(在我的情况下,无法访问Redis,因此我将Redis connector对象的时间限制为5秒)


希望这对某人有所帮助。

在经历了多次头痛之后,我终于想出了一个解决办法。 这是受到Java编程范例的启发,在Java编程范例中,几乎每个实现良好的延迟生成端点都是可丢弃的或调用可丢弃的,并且每个已知的异常都被捕获和处理

因此,最好的解决办法可能是这样。对于发出的每个请求,确定通信通道,无论是DB查询、辅助API响应,还是可能导致PHP达到其
max\u execution\u timeout
limit的任何其他东西,在try catch中,将其设置为一个时间限制,然后“超时”。这逐渐有助于查明超时的原因(在我的情况下,无法访问Redis,因此我将Redis connector对象的时间限制为5秒)

希望这对别人有帮助