服务器每小时崩溃一次,但当时没有运行任何特殊程序

服务器每小时崩溃一次,但当时没有运行任何特殊程序

今天我的 Ubuntu 12.04 服务器开始每小时崩溃一次。实际上是每小时 32 分左右。这似乎是一次真正的内核崩溃,也就是说 /var/log/syslog 中没有任何内容,它只是停止了。我甚至编写了一个脚本,每秒打印出时间,试图确定确切的时间,并观察下一次崩溃的发生情况,我能知道的最好时间是大约在整点后 32 分 13 秒。

但是我当时没有运行任何 CRON 作业,什么都没有。我运行的那些作业都是多年来一直运行的 Perl 脚本,它们没有做任何特别的事情。我可能已经几周没有对服务器进行任何更改,而且肯定没有做任何重要的事情。我查看了所有我能找到的计划任务来源。当时没有发生任何特别的事情,除了服务器崩溃而没有留下任何原因的痕迹。

当它崩溃时,我别无选择,只能通过托管公司的网站重新启动它,这是我迄今为止的解决方案,但现在是凌晨 4 点,我必须找个时间睡觉。但如果我这样做,我的网站将在一小时内关闭。任何帮助都将不胜感激,无论是 a) 如何找到正在运行并导致崩溃的任务(如果是的话),还是 b) 当它没有出现在 syslog 或 dmesg 中时,如何跟踪正在发生的事情。


解决了。我联系了我的主机。显然他们安装了新的服务器监控软件,该软件将我的服务器标记为使用了过多的磁盘 I/O。他们的这个软件没有告诉我,而是直接关闭了我的服务器。它每小时运行一次,时间为 :32 分钟。

答案1

或许还有其他原因。

  1. 是否有任何特定的应用程序(Web 服务器)正在运行并消耗更多内存(即,如果调整/优化不当则无法释放内存)

  2. 尝试捕获每分钟消耗较多的所有进程cpumemory可能有助于在您的场景中找到原因) - 编写一些脚本来捕获这些信息(重定向输出到文件)并将其配置到crontab

答案2

  • 你应该尝试排除法。所以,在一小时后大约 30 分钟,停止 cron。是的,我知道你不认为这是 cron 的问题,但还是这么做吧。如果它在 32 分钟时没有崩溃,那么它是 cron,您可以尝试消除当时运行的一半 cron 脚本,直到找到有问题的脚本。如果在禁用 cron 的情况下它仍然崩溃,那么在下一次 30 分钟时,您还将禁用您正在运行的一半守护程序,直到找到有问题的守护程序。(如果系统在 32 分钟时仍然崩溃,即使一切被禁用,那么要么你的系统被严重黑客入侵,要么你当时遇到了电源问题,或者你正在使用虚拟机并且物理主机当时做了一些事情)

  • 安装串行控制台(更好)或 netconsole(更简单)。这样,当它崩溃时,您可能会在另一台机器上获得日志。

  • 作为临时解决方案,安装带有模块watchdog的软件包softdog(或者更好的是硬件软件包,如果你的硬件支持的话)。它不会解决问题,但可能会让你有时间休息,直到你解决问题

您的一些旧的“始终正常工作”脚本可能在处理新数据时遇到问题,或者数据太多,因此它们会占用所有资源。您应该始终设置ulimit限制,以免发生这种情况。脚本还可能访问磁盘的损坏区域或尝试访问其他有问题的硬件,从而导致崩溃。串行控制台应该告诉...

答案3

试试这个 watch -n 10 top #(每 10 秒重复命令)。

此致

相关内容