我有2个Debian Linux 6.0.4服务器有一个奇怪的行为:5-7-10天后,他们挂起。 通过这个我的意思是服务器需要重新启动,并在这之前,ping不会回答。
我已经在这个问题上挣扎了好几个月了,这里有一些想法/我没有能够解决问题的尝试。
虽然我有多年的pipe理经验,但我从来没有遇到过这样的问题,现在我不知道还有什么地方需要调查。
如果你有一个想法,我可以尝试解决这个问题,请与我分享:-)
服务器真的挂了吗?还是只能ping不通?
安装一个监控工具,比如Munin(或类似的),它可以显示CPU负载,内存状态,磁盘使用情况以及其他各种各样的graphics – 你可以configuration它监视很多方面。 Nex时间挂起服务器,检查图表是否有任何不寻常的迹象。 你将学会看看一个正常的图表是什么样的,所以任何异乎寻常的东西都是可疑的(尽pipe不一定是错误的)。
你确定你正在检查所有的服务器日志吗? 即你有Web /邮件/ FTP / DNS /其他服务器? 检查所有这些日志! 不要忘记在故障排除时启用debugging日志logging。
如果服务器每个星期左右崩溃,那么它可能会定期发生,例如cron作业或日志轮转等等。
确保你得到所有的系统邮件(root别名)。 您甚至可以安装OSSEC,这是一个很好的工具,可以在出现问题时关注日志并收取电子邮件。 但是这个OSSEC工具只是一个查看日志的自动化方式,所以没有什么不可思议的。
networking问题? dhcp租约过期了吗?
请显示/ var / log / messages和/或/var/log/kern.log的相关内容,这可能是内核logging了一些崩溃报告或其他可能导致问题的东西。 当我遇到这种无法解释的挂起时,这是由于一个糟糕的驱动程序,因为日志不是很详细,我无法find确切的驱动程序。
在我的情况下,有软locking(内核:[XXXX]错误:软locking – CPU#X)。 经过一番研究,我发现http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556030 ,最后的评论提供了一些见解和一种使日志更加冗长的方法。 这是一个简单的内核修改,但如果你觉得编译自己的内核感觉不舒服,那么可能不是最好的。
只需更新内核或安装较新版本并重新启动即可解决问题。
引用:
我们广泛研究了这个问题。
TLB刷新软锁只是一个死锁的结果。
背景:CPU使用处理器间中断来发出TLB刷新,以便处理分页更改。 然后,发出CPU循环,直到所有处理器都确认更改。 如果这样的处理器在自旋锁上处于死锁状态,那么这个处理器永远不会移动,然后触发软件locking。 死锁出现在自旋锁上,这个锁有时可以由用户代码保存(通过模块的/ proc或/ sys接口)。
识别根本原因(即哪个驱动程序导致问题)的唯一方法是将所有CPU堆栈转储到软locking代码中。
一种方法是修改内核并添加
arch_trigger_all_cpu_backtrace()在里面
kernel/softlockup.c:softlockup_tick()function。
这是基于NMI IPI,即使在死锁的情况下,也确保所有的堆栈都被转储(不要指望不可能发生)。
你应该很容易find错误的驱动程序,并发布相关的错误。
显然这个问题与一些导致服务器挂起的python脚本有关。 我不明白他们为什么吊死服务器,但至less他们不再挂上。