情况
在系统日志(/var/log/messages 或journalctl)中,打印了许多以下消息。
Run Code Online (Sandbox Code Playgroud)May 25 07:23:59 XXXXXXX kernel: [13445315.881356] BUG: soft lockup - CPU#16 stuck for 23s! [yyyyyyy:81602]接下来是各种堆栈跟踪。本文档试图解释软锁定消息的含义。
错误消息本身并没有告诉您导致问题的原因。
原因
“软锁定”被定义为导致内核在内核模式下循环超过 20 秒,而不给其他任务运行机会的错误。看门狗守护程序将向系统中的所有 CPU 发送不可屏蔽中断 (NMI),然后这些 CPU 会打印当前正在运行的任务的堆栈跟踪。
减少服务器负载是正常的解决方案:
解决
在正常情况下,如果负载减少,这些消息可能会消失。如果内核繁忙,处理大量需要分别扫描、释放或分配的对象,则可能会发生这种“软锁定”。这些任务的堆栈跟踪可以让您初步了解这些任务正在做什么。但是,为了能够检查消息背后的原因,需要进行内核转储。
您无法禁用这些消息,但是在某些情况下,增加触发这些软锁定的时间可以缓解这种情况。
为此,只需增加以下
sysctl参数:kernel.watchdog_thresh此参数的默认值是10,并且将该值加倍可能是一个好的开始。