我有 2 台 Debian Linux 6.0.4 服务器,它们的行为很奇怪:5-7-10 天后它们会挂起。我的意思是服务器需要重新启动,在此之前 ping 不会响应。
我已经为这个问题苦苦挣扎了几个月,这里是我尝试过的但无法解决问题的一些想法/方法。
- 我更换了一台服务器上的 RAM。由于是两台不同的服务器,我怀疑这可能是与硬件有关的问题,因为第三台相同的服务器不会出现此问题。
- 我记录了服务器负载,当它崩溃时,负载正常(相当低)
- 我在服务器日志中找不到任何内容,直到服务器冻结,日志都很好。
- 不幸的是我无法访问控制台。
虽然我有多年的管理经验,但我从未遇到过这样的问题,而且现在我不知道在哪里可以调查。
如果您知道我可以尝试什么来解决这个问题,请与我分享:-)
答案1
服务器真的挂了还是只是无法 ping 连接?
安装一个监控工具,例如 Munin(或类似工具),它不仅会显示 CPU 负载的图表,还会显示内存统计信息、磁盘使用情况和其他各种信息 - 您可以将其配置为监控许多方面。下次服务器挂起时,请检查图表是否有任何异常迹象。您将学会看清正常图表的样子,因此任何异常情况都是可疑的(尽管不一定是错误的)。
您确定检查了所有服务器日志吗?即您有 web/mail/ftp/dns/其他服务器吗?检查所有此类日志!在进行故障排除时,不要忘记启用调试日志记录。
如果服务器每周左右崩溃一次,则可能是某些定期发生的事情,例如 cron 作业或日志轮换等。
确保你收到所有系统电子邮件(根别名)。你甚至可以安装 OSSEC,这是一个很棒的工具,可以监视日志并在出现问题时收到电子邮件。但这个 OSSEC 工具只是一种自动查看日志的方式,所以没有什么神奇之处。
网络问题?dhcp 租约已过期?
答案2
请显示 /var/log/messages 和/或 /var/log/kern.log 的相关内容,内核可能记录了一些崩溃报告或其他可能提供一些线索的内容。当我遇到这种无法解释的挂起时,这是由于驱动程序有问题,因为日志记录不是很详细,我无法找出确切的驱动程序。
在我的案例中,出现了软锁定(内核:[XXXX] BUG:软锁定 - CPU#X)。经过一番研究,我发现http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556030最后一条评论提供了一些见解和一种使日志记录更详细的方法。这是一个简单的内核修改,但如果您不习惯编译自己的内核,这可能不是最好的选择。
只需更新内核或安装新版本并重新启动即可解决问题。
引用:
我们对这个问题进行了广泛的研究。
TLB 刷新软锁只是死锁的后果。
背景:一个 CPU 使用处理器间中断向多个其他 CPU 发出 TLB 刷新命令,以传播分页更改。然后发出命令的 CPU 循环,直到所有处理器都确认更改。如果此类处理器在自旋锁上处于死锁状态,这种情况永远不会发生,然后触发软锁定。死锁发生在自旋锁上,有时用户代码可能持有此锁(通过模块的 /proc 或 /sys 接口)。
识别根本原因(即哪个驱动程序导致问题)的唯一方法是转储软锁定代码中的所有 CPU 堆栈。
一种方法是修改内核并添加
arch_trigger_all_cpu_backtrace()
在里面
kernel/softlockup.c:softlockup_tick()
功能。
这是基于 NMI IPI,它确保所有堆栈都被转储,即使在死锁的情况下也是如此(也不要指望不可能发生的事情)。
您应该可以轻松找到有故障的驱动程序并发布相关的错误。
答案3
显然,问题与一些导致服务器挂起的 Python 脚本有关。我不明白他们为什么要挂起服务器,但至少他们不再挂起它了。