调试 Linux 机器死机

调试 Linux 机器死机

我有 15 台相同的 Linux RH 4.7 64 位服务器。他们运行集群数据库(集群是应用程序级别)。有时(大约每个月)会有一个随机的盒子(尽管永远不会相同)冻结。

我可以 ping 盒子并且 ping 工作正常。如果我尝试在框中使用 ssh,我会得到:

ssh_exchange_identification: Connection closed by remote host

SSH 设置正确。

当我进入服务器机房并尝试直接登录控制台时,我可以使用Alt+切换控制台Fn,我可以输入用户名,并且字符确实显示,但按后Enter,没有任何反应。有一次我等了8个小时也没有变化。

我设置了 syslog 将所有内容记录到远程主机,但这些日志中没有任何内容。当我重新启动机器时,它可以正常工作。我已经运行了硬件测试 - 一切正常,日志中没有任何内容。机器还通过 NAGIOS 进行监控,并且在冻结之前没有异常负载或活动。

我已经没有主意了;我还能做什么或检查什么?

答案1

听起来您的内核以某种方式发生了恐慌,导致 sshd 无法发送服务器密钥。可能是内核被楔入,导致网络堆栈仍然运行,但 vfs 层不可用。

当我在 RHEL4 系统上遇到类似问题时,我设置了netdump 和 netconsole 服务,以及专用的 netdump 和 syslog 服务器来捕获故障转储和内核恐慌信息。我还将 kernel.panic sysctl 设置为 10。这样,当系统发生紧急情况时,您将获得该系统上的内核跟踪和内存副本,您可以使用“崩溃”实用程序对其进行分析。

您当然也会受益于为主机设置串行控制台,这样您就可以看到控制台输出并可能按下神奇的 sysrq 键。另外,如果您愿意设置网络并且您有支持它的硬件,您可以使用 IPMI 远程关闭、开机、重新启动和查询硬件。

(值得一提的是,RHEL5 具有与 kexec/kdump 类似的功能,只是崩溃转储存储在本地)

答案2

我敢打赌,你的内存即将耗尽。当系统试图找出从哪里获取一些信息时,它正在慢慢停止。它可能发生得如此之快,以至于您的监控无法捕捉到它。我会加强监控,包括远程记录内存使用情况。还要检查日志中是否有 OOM 消息。

(您甚至可能只想打开一些 ssh 窗口来运行 top。)

答案3

对我来说,这听起来像是系统资源不足,因此无法分配 ssh 服务器端所需的进程。

实际的瓶颈可能会有所不同 - 进程不足或内存不足 - 唯一确定的方法是查看日志和控制台以查看其中是否存在任何内容。您可能想要设置一个预先启动的 ssh 作业场景(每台机器一个),只是为了下次发生时做好准备。

如果是真的不好,那么您可能需要考虑启动另一个带有更多内置命令的 shell,这样您就可以进行更多调查,而不必启动额外的进程,因为这可能是不可能的。另外,“tail -f /var/log/*”可能非常有用。

祝你好运。

答案4

我唯一一次看到类似的情况是使用 KVM 切换器和键盘热键(例如 alt+n)在服务器之间切换。这种情况并不是每次都会发生,而且是服务器被切换而受到影响 - 所以它不会立即引起注意。如果使用 KVM 切换器本身上的物理按钮在服务器之间切换,则不会发生锁定情况。如果经常使用热键,有时服务器将不允许新的登录。现有 SSH 会话不受影响。

相关内容