什么原因会导致服务器上的所有服务都停止运行,但仍能响应 ping?以及如何找出原因

什么原因会导致服务器上的所有服务都停止运行,但仍能响应 ping?以及如何找出原因

在短短几天内,我的服务器已经两次完全瘫痪,这意味着 http、ssh、ftp、dns、smtp,基本上所有服务都停止响应,就好像服务器被关闭了一样,但它仍然响应 ping,这是我最困惑的地方。

我确实有一些 php 脚本会在一小群用户使用的短时间内对服务器造成巨大的负载(CPU 和内存),但通常服务器可以完美地“承受”这些突发负载,并且当它发生故障时,它永远不会与此类使用高峰同时发生(我不是说它不能相关,但它不会在这些之后发生)。

我并不是要求你神奇地告诉我这些崩溃的根本原因,我的问题是:是否有一个进程的死亡可能导致所有这些服务同时停止?有趣的是,除了 ping 之外,所有网络服务都会停止。如果服务器的 CPU 被某个进程占用了 100%,它也不会响应 ping。如果 apache 因(例如)php 脚本损坏而崩溃,那只会影响 http,而不会影响 ssh 和 dns……等等。

我的操作系统是 Cent OS 5.6

最重要的是,硬重启服务器后,我应该查看哪些系统日志?/var/log/messages 没有显示任何可疑内容。

答案1

总结仍然响应 ping 是预期行为,请检查您的内存使用情况)

ICMP 回显请求(即 ping)由内核网络堆栈处理,没有其他依赖。

内核被称为“内存驻留”,这意味着它将始终保存在 RAM 中,并且不能像常规应用程序那样交换到磁盘。

这意味着在物理内存不足的情况下,应用程序会交换到磁盘,但内核仍保留在原处。当物理内存和交换内存都已满(并且系统无法再管理您的程序)时,机器将崩溃。但是由于A)内核仍在内存中,b)它无需任何其他设备的帮助就可以响应 ping 请求,尽管一切都已停止,系统仍将继续响应 ping。

关于您的问题,我强烈怀疑是内存问题。安装“sysstat”并使用“sar”命令查看内存/cpu/负载/io 负载等日志。我预计在崩溃时您会看到 100% 的物理和交换使用率。

我也会考虑看看消息或者/var/log/消息是否有任何迹象表明 OOM-killer(内存不足杀手)被调用。这是内核的紧急系统,在内存耗尽时会开始终止进程​​。它的有效性在很大程度上取决于要终止哪些进程。消耗内存的单个进程将被有效终止并释放内存,但是基于 Apache 的网站会在子进程被终止后立即生成替代进程。

答案2

通常,这是 I/O 或磁盘子系统问题。很多时候,这会伴随极高的系统负载平均值。例如,下图中详述的系统在脚本运行错误、锁定大量文件且负载上升到 36 时变得无响应(但可以 ping 通)... 在 4-CPU 系统上。

在此处输入图片描述

在 RAM 中运行且不需要磁盘访问的服务将继续运行...因此,网络堆栈 (ping) 已启动,但当需要磁盘访问时,其他服务会停止...当引用密钥或需要查找密码时,使用 SSH。当平均负载达到 30 左右时,SMTP 往往会关闭...

当系统处于此状态时,尝试nmap对服务器的 IP 进行远程检查,以查看发生的情况。

如果这是磁盘或存储问题,您的日志记录可能无法工作......

你能描述一下硬件设置吗?这是虚拟机吗?存储布局是什么?

除了记录之外,您还想看看是否可以绘制系统性能图表并了解这种情况发生的时间。看看这是否与特定活动相关。

相关内容