我们的 Web 服务器使用的是 Nginx + PHP + FastCGI,我们在错误日志中看到一堆超时错误(见下文)。我们快速重启了 nginx,问题就解决了——目前是这样。但是,我们正在尝试找到根本原因并修复问题,以便它永远不会再次发生。
具体来说,
- 您能向我们解释错误或为我们指明正确的方向吗?
- 看起来我们同时遇到了两个错误:18657(连接失败)和 18656(上行超时)。它们是什么时候发生的?
- 有没有办法查看错误发生时服务器上的网络统计信息?我们想查看问题发生时有多少个 php 进程、入站连接等。
- 我们如何才能重现该问题并彻底修复它?
以下是错误(我们发现了数百个,发布了其中一些):
- error.log:2011/08/04 19:31:44 [错误] 18657#0: *464859 connect() 连接到上游时失败(110:连接超时),客户端:166.205.138.117,服务器:api.website.com,请求:“POST /v3/logAgentEvent HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“api.website.com”
- error.log:2011/08/04 19:31:44 [错误] 18656#0:*464476 上游读取响应标头时超时(110:连接超时),客户端:98.140.86.90,服务器:api.website.com,请求:“POST /v3/logAgentEvent HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“api.website.com”
答案1
您能向我们解释错误或为我们指明正确的方向吗?
检查导致错误的组件的文档和/或源代码。
看起来我们同时遇到了两个错误:18657(连接失败)和 18656(上行超时)。
- 18657(连接失败):看来这个错误是由您使用的 FASTCGI 实现触发的。请查看其文档/源代码以了解其含义。
- 18656(上行超时):看来这个错误是由您使用的 FASTCGI 实现触发的。请查看其文档/源代码以了解其含义。
它们什么时候发生?
您可以在日志中找到发生时间的时间戳。要了解它们发生的原因(含义是什么?),请查看文档/源代码。如果这对您来说太复杂,请联系您的系统管理员并让其为您分析。这可能非常具体,具体取决于您使用的确切服务器版本、您使用的确切 FASTCGI 实现以及您使用的确切 PHP 配置。
有没有办法查看错误发生时服务器上的网络统计信息?我们想查看问题发生时有多少个 php 进程、入站连接等。
与系统管理员联系。她/他应该能够提供您想要的任何类型的监控。(此选项可能仅适用于未来,而不适用于过去)
我们如何才能重现该问题并彻底修复它?
除非您找到原因,否则无法明确回答这个问题。您可以开始监控并等待它发生,也可以尝试通过一次向服务器发送数千个请求来引发这种情况。
我强烈建议您开始监控您的服务器。这将使您更好地了解您可能遇到的问题。您描述的两个错误看起来都像网络问题。这可能是您正在联系的服务器(可能是本地计算机)超时(上游超时)甚至拒绝连接(连接失败)。
然后,您可以尝试不要让太多连接触发此问题,以便将故障直接转移给用户(而不是给系统带来太大压力),并且/或者,如果您能找到原因,请调整网络设置以更好地满足您典型网站使用的要求。但是,服务器在技术上可能无法处理您面临的请求数量/类型(硬限制)。监控将帮助您找出原因。