我如何知道服务器崩溃时正在做什么?

我如何知道服务器崩溃时正在做什么?

我有一台运行 Centos 5.2 的服务器,有没有更好的方法来了解服务器崩溃的原因或当时正在做什么?

抱歉,我是新手,如能得到任何帮助我将不胜感激~谢谢

答案1

如果您经历过内核恐慌,您可以设置一个远程内核控制台来捕获本地控制台上可能丢失的所有数据(特别是当崩溃来自不可屏蔽中断时,这往往会重新启动系统)。

在您预计可能崩溃的系统上:

/sbin/modprobe netconsole [email protected]/eth0,[email protected]/00:19:BB:31:B8:0E
  • 6666 是任意端口号
  • 10.1.1.16 是要通过其发送的本地接口的 IP 地址
  • eth0 是要通过其发送的本地接口的名称
  • 10.1.1.17 是要发送到的远程接口的 IP 地址
  • 00:19:BB:31:B8:0E 是要发送到的远程接口的 MAC 地址

在远程系统上,运行(这需要您安装了 netcat):

nc -l -p 6666 -u | tee capture.file

这将捕获远程系统上的所有内核输出。它运行在更低的级别(内核中写入 /dev/klog 的同一点),因此即使 syslog 等已停止运行,您也可能看到内核崩溃时输出的最后一点信息。

答案2

尝试启动流程会计

/etc/init.d/psacct start/sbin/chkconfig psacct on(开机自动启动)

然后使用 lastcomm(1) 查看何时运行了什么。

或者尝试安装在顶上,它将每 10 分钟记录一次您的机器内存和进程状态,以便您了解发生了什么。

atop -r /var/log/atop/atop_YYYYMMDD然后使用 t 和 T 键前进和后退

在 99% 的情况下,从这两个方面可以清楚地知道到底发生了什么

答案3

您是否检查过 /var/log/dmesg、/var/log/messages 和 /var/log/syslog?

答案4

通过网络收集核心可能有些过度,您可以将其转储到本地。这是一份指南用于设置和测试 kdump。如果您按照说明操作,但仍然无法在本地创建转储,则应继续通过网络进行捕获。

当然,一旦你有了一个核心转储,你需要使用碰撞实用程序。您需要安装正确的内核调试信息rpm 运行正在运行的内核,然后调用 crash - 您应该从白皮书中了解一般要点。如果您可以打开它,您应该首先查看日志 - 向下滚动到底部,您应该得到一些线索,了解崩溃发生时发生了什么。

相关内容