如何调试无响应的 Web 服务器

如何调试无响应的 Web 服务器

我们有一个中型 EC2 实例运行 Ubuntu 12.04,通过 Apache 提供大约十几个小型 PHP Web 应用程序。

大约每隔一天,服务器就会失去响应,需要重新启动实例才能恢复功能。在此期间,无法通过 HTTP 或 SSH 访问服务器。

每次,最后记录的 Apache 请求都是针对提供 4MB PDF 文档的 PHP 应用程序。用户代理始终将客户端识别为 iPad(具体来说Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25),并且通常是相同的 IP 地址,因此可能是同一个用户。

PHP 应用程序是一个旧版应用程序,在将文件内容从磁盘回显到客户端之前会检查一些权限。我们无法自己重现此问题,无论是使用 iPad 还是通过任何其他方式访问文件。

我们尝试了一些监控解决方案,试图更好地了解服务器宕机时发生的情况,但它们似乎都没有显示系统资源存在任何问题。

我的问题是,我们可以采用哪些策略来尝试排除故障并有望解决这个问题?

答案1

首先监视系统资源(CPU 负载、内存、磁盘),例如使用 collectd 或 sysstat。

请记住,我在这里冒险,您描述的问题可能是由于资源耗尽(最有可能是内存)造成的,请运行egrep -i 'killed process' /var/log/*以寻找 OOM 杀手调用。

系统日志可能包含原因的痕迹(/var/log/messages、apache 的错误日志)。

尝试启用更详细的日志并在测试时密切关注您的系统。

相关内容