服务器响应ping,但不会接受SSH连接,直到重新启动。 0%的CPU

我有一个Web服务器偶尔停止工作完全。 Web请求,CPU使用率,内存使用率,磁盘使用率或导致崩溃的networking使用率不会上升。 只是所有的使用graphics突然下降到0,服务器变得基本无法访问。 我仍然可以ping通服务器,实际上我可以在端口80和22上获得连接,但除了ping响应之外,我从来没有得到任何响应。

重启服务器会导致完全恢复。 这种事故发生在18-36小时左右。 这是一台在亚马逊的EC2上运行Ubuntu 11.04(股票PHP 5.3,Apache,JVM)的虚拟机。 我创build了几十台服务器,结果相同,所以这不是硬件问题。 我已经尝试用Ubuntu 10.10从头开始重build我的服务器映像,并没有任何效果。

我可以尝试诊断这个问题?

编辑,进一步的细节:我有一个cron作业每分钟运行一次,logging详细的Apache状态的输出(哪些URL正在运行,多久,等等)。 崩溃前的最后一个日志看起来很正常,一旦崩溃发生,cron作业甚至不会运行(根据/var/log/auth.log)。

编辑,为清楚起见:我可以telnet到端口22,但不是SSH到它。 我可以telnet到80端口,但是对于HTTP GET没有任何响应。

您在Java应用程序中遇到问题。 使用kill -3 <jvm_pid> 2-3个线程转储。 您可以在/proc/<jvm_pid>/fd/1文件中find线程转储。 将线程转储发送给Java开发人员以search卡住或locking的线程。

PHP也可能发生同样的事情。 检查Apache的状态,看看你有多less连接,在哪个状态,在哪个页面上。

编辑:作为一个丑陋的解决方法,您可以重新启动Java进程,而不是重新启动虚拟机。

你应该检查sar – 希望它已经在运行,每隔几分钟收集一次系统统计信息。

这里是关于在Ubuntu上启用sar的一些信息 。

启用后,您可以运行sar -A查看已收集的统计信息。 希望在那里有一些信息会指出你正确的方向,例如它应该显示你的机器是否突然使用大量的虚拟内存。

dmesg输出可以在这里非常有帮助 – 也许一个奇怪的驱动程序问题导致机器无响应?

你有nscd安装和使用? 在过去,如果nscd死了,却给我造成了这样奇怪的冻结,但是却把它留下了。