几天之内我已经发生过两次我的服务器完全宕机的情况,这意味着 http、ssh、ftp、dns、smtp,基本上所有服务都停止响应,就好像服务器已经关闭一样,除了它仍然响应 ping ,这是最让我困惑的。
我确实有一些 php 脚本会在短时间内在服务器上造成巨大的负载(cpu 和内存),由一小群用户使用,但通常服务器在这些突发事件中“存活”得很好,当它出现故障时永远不会与这样的使用高峰重合(我并不是说它不相关,但它不会在那些之后发生)。
我不是要你神奇地告诉我这些崩溃的最终原因,我的问题是:是否有一个进程的死亡可能导致所有这些服务同时停止?有趣的是,除了 ping 之外,所有网络服务都出现故障。如果服务器 100% 的 CPU 被某个进程占用,它也不会响应 ping。如果 apache 因为(例如)损坏的 php 脚本而崩溃,那只会影响 http,而不影响 ssh 和 dns ....等。
我的操作系统是 Cent OS 5.6
最重要的是,硬重启服务器后,我应该查看哪些系统日志?/var/log/messages 没有发现任何可疑的东西。
(tl;dr仍然响应 ping 是预期的行为,请检查您的内存使用情况)
ICMP 回显请求(即 ping)由内核网络堆栈处理,没有其他依赖性。
内核被称为“内存驻留”,这意味着它将始终保存在 RAM 中,并且不能像常规应用程序那样交换到磁盘。
这意味着在您用完物理内存的情况下,应用程序将交换到磁盘,但内核仍保留在原处。当物理内存和交换内存都已满(系统无法再管理您的程序)时,机器将崩溃。然而,因为a)内核仍在内存中并且b)它可以在没有任何其他帮助的情况下响应 ping 请求,尽管一切都死了,系统将继续响应 ping 。
关于您的问题,我强烈怀疑内存问题。安装“sysstat”并使用“sar”命令查看内存/cpu/负载/io 负载等日志。我希望在崩溃时您会看到 100% 物理和交换使用。
我还会考虑查看dmesg或/var/log/messages以查找调用 OOM 杀手(内存不足杀手)的任何迹象。这是内核的紧急系统,它会在内存耗尽时开始杀死进程。它的有效性在很大程度上取决于正在杀死哪些进程。消耗内存的单个进程将被有效地杀死并释放内存,但是基于 apache 的网站将在子进程被杀死后立即生成替换进程。
通常,这是 I/O 或磁盘子系统问题。通常,这将伴随着极高的系统平均负载。例如,下图中详述的系统在脚本运行出错时变得无响应(但可以 ping 通),锁定了一堆文件并且负载上升到 36... 在 4-CPU 系统上。
在 RAM 中运行且不需要磁盘访问的服务继续运行......因此,网络堆栈(ping)已启动,但其他服务在需要磁盘访问时停止......引用密钥时的 SSH 或需要密码查找。当平均负载达到 30 左右时,SMTP 往往会关闭......
当系统处于这种状态时,尝试远程
nmap
访问服务器的 IP 以查看发生了什么。如果这是磁盘或存储问题,您的日志记录可能不起作用...
你能描述一下硬件设置吗?这是虚拟机吗?什么是存储布局?
除了日志记录,您还想看看是否可以绘制系统性能图并了解何时发生这种情况。查看这是否与特定活动相关。