我一直有一个零星的问题,似乎随机发生在我们的Ubuntu服务器之一。 服务器将随机决定停止响应除了ping请求之外的所有服务(SSH,HTTP等)上的连接。 它仍然会响应ping,但是其他的东西都会死的。 获得系统备份的唯一方法是让数据中心执行硬重启。
我一直在试图调查这个问题将近一年,但是我一直无法弄清楚是什么导致了这种行为。 我安装了一系列监控实用程序(包括Monit),并将其设置为在CPU使用率,内存使用率或交换空间使用率超过特定阈值的情况下向我发送警报。 我还写了一个脚本来发送当前正在运行的进程列表,如果满足这些阈值的任何一个。
不幸的是,无论是什么原因导致服务器无响应速度如此之快,以至于监控工具甚至没有机会发送警报电子邮件(这或者问题的原因与cpu无关或者内存使用情况)。 我的一位朋友build议编写一个简单的bash脚本来获取ps auxf的输出,并且每5分钟将其写入一个日志文件,所以我设置了一个并放在crontab上。
今天早上我醒了,发现服务器再次没有响应,于是我联系了数据中心,让他们再次进行硬盘重启。 然后我login到服务器,查看ps auxf快照的日志文件。 在日志文件中,最后logging的快照是在午夜,并且在服务器重新启动之间没有写入更多的快照,表明服务器在午夜的某个时候没有响应,导致进程日志脚本无法运行。
上一个快照没有包含任何指示为什么会发生的进程列表。 上次快照中没有使用大量cpu时间或内存的进程。 我做了一些谷歌search,看到其他人在这里发布了相同的问题。 其中一个这样的post包含的答案build议你检查/ var / log / messages,但不幸的是在这个服务器上/ var / log / messages自2011年以来还没有写过(我不知道为什么,其他人有权访问这个服务器,可能已经改变了日志path)。
我的猜测是某种内核恐慌正在发生,导致服务器上的所有服务停止工作,但我不知道是什么导致了内核恐慌,或者甚至是实际发生了什么。 有没有人有任何想法可能造成这种情况? 这对我来说是一个非常头痛的问题,我花了几乎一年的时间来试图解决这个问题。
谢谢!
不要运行cronjobs。 分叉守护进程非常高的优先级(我假设你可以得到根)。 你想要的是一个实时的过程(不能被预先占用),定期做任何你认为合适的扫描。 并使用计时器来运行这些扫描。 这听起来像一个资源块 – 就像过程标头中的可用进程槽已经用完一样,例如,你用叉子炸弹看到的那种东西。 这是不太可能的,但突然冻结是资源完全消失或完全消耗的症状。 内存过度使用会在系统完全无法使用之前导致大量的交换。
小心! 你可以让这个进程杀死你的系统。 如果您对实时编程感觉不舒服,请获得一些帮助。
syslog有什么要说的? 如果syslogd没有运行,则打开服务/守护进程。 服务日志说什么? 除非这个起始时间less于几个毫秒,否则就不得不抱怨。 某处。