假设系统是 Red Hat 变体,x86 架构。假设没有冷却问题。
机器负载过高是否可能导致其重新启动?
我当然知道机器会变得没有响应。但它真的可以重新启动吗?
如果是的话,这是怎么发生的?
答案1
这里没有足够的细节...
但也许,也许不是……这取决于负载的性质以及产生负载的原因。高负载本身不会导致系统重新启动,但可能表明存在其他可能导致计划外关机的重大问题。例如,高交易邮件服务器或数据库服务器运行负载80与 RAID 控制器锁定的系统有很大不同。
最简单的例子就是存储。存储连接丢失或 RAID 控制器故障后负载瞬间上升,很容易将繁忙系统的负载推高至 100 以上。系统可能仍可 ping 通并在一定程度上可用,但 I/O 操作可能会失败。即使 TCP/IP 堆栈在内存中且可用,某些命令也可能停止工作。
因此,在这种情况下,内核可能会崩溃,或者系统或应用程序可能会停滞。在质量好的硬件上,可能会出现看门狗定时器热启动服务器。HP 和自动服务器恢复 (ASR)功能或 VMware 的HA虚拟机监控可以采取这一行动。
答案2
当然可以,但自动重启通常与硬件/软件问题有关,例如过热或内核错误。因此,重负载可能导致过热,进而导致重启。无论如何,您都应该调查日志或内核转储以找出确切原因。
答案3
我认为答案是否定的,高负载本身不会导致系统重启。这可能是某种硬件问题或软件问题。即使它在高负载下总是失败,也可能是高负载引发了其他问题。我知道这没什么帮助,但我想这确实回答了这个问题 :-)
答案4
我已经遇到过这样的情况好几次了。
当负载高于机器的设计负载时,我遇到了三类不同的问题:
- 令人难以置信的放缓
在这种情况下,系统出现故障,因为它必须快速地来回交换内存和磁盘。这将使服务器无响应,直到问题解决。如果您暂时不需要服务器,它最终可能会恢复正常。如果内存不足,您可能会进入问题 #2,或者内核最终决定终止进程(可能是因为 amalloc()
返回NULL
,而程序员没有检查这种情况,您会得到一个 SEGV...)
- 总锁定期
这就是我所说的达到内核临界点的负载的常见结果。内核甚至无法为自己分配内存缓冲区。如果您有一个足够大的交换文件,这种情况很少见,但可能是您的进程不停地分配越来越多的内存。(作为一名开发人员,这种情况偶尔会发生在我自己的代码中,如果我没有及时发现它,我将不得不强制重新启动,因为我将无法停止进程并释放内存...... IRIX 有某种东西可以自动杀死这些流氓进程,我认为这真的很酷。)
- “自动重启”
现在我遇到了两种自动重启的情况。一种是我在某家公司使用 VPS(不久前),当你试图使用过多内存时,VPS 系统会关闭整台机器!所以你的电脑会被强制关闭。我仍然在其他 VPS 上看到类似的行为。然而,现代的 VPS 更有可能让内核杀死一个进程,因为它请求了太多内存。所以那个进程会关闭。VPS 本身仍在运行……但毫无用处(没有守护进程在其上运行……)
在我的硬件上,我遇到了自动重启问题。通常有两个原因:超载或错误地(伪造软件)或太快地访问硬件(我想这也可以被视为错误......)所以我的电脑如果我的负载过高且持续时间过长,就会偶尔重启一次。我不知道为什么会发生这种情况,但从那时起我换了一台不同的电脑,再也没有遇到过这个问题。
我还遇到了其他自动重启的情况,即“错误地”访问视频板会以某种方式向主板发送“硬件”重置。这也会导致自动重启。如果您的计算机上的任何东西都这样做(可能是因为与驱动程序“轻微”不兼容),那么它也可以通过这种方式自动重启……