我们有一个中型 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 的错误日志)。
尝试启用更详细的日志并在测试时密切关注您的系统。