系統無回應,但沒有 CPU 負載

系統無回應,但沒有 CPU 負載

我的一台伺服器完全沒有回應:

top - 06:16:53 up  2:14,  1 user,  load average: 30.95, 29.96, 22.92
Tasks: 168 total,   2 running, 166 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 12.6 sy,  0.0 ni,  0.0 id, 86.4 wa,  0.0 hi,  0.0 si,  1.1 st
KiB Mem :  1014524 total,    61368 free,   877028 used,    76128 buff/cache
KiB Swap:        0 total,        0 free,        0 used.     4196 avail Mem 
  scroll coordinates: y = 1/168 (tasks), x = 1/12 (fields)
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                         
   30 root      20   0       0      0      0 S 11.1  0.0   4:04.70 kswapd0                                                                                                                                         
 1116 root      20   0  791548  44900      0 S  0.4  4.4   0:14.91 dockerd                                                                                                                                         
    1 root      20   0   37752   2664    864 D  0.2  0.3   0:06.00 systemd          

很難說發生了什麼,因為我無法真正獲得太多資訊(反應遲鈍),但這就是我所看到的:

  • 平均負載非常高
  • 我看到大約 20% - 30% CPU 負載
  • 我沒有看到高 IO/網路利用率
  • 我無法識別運行隊列中有哪些進程

怎麼可能實現高平均負載和低 CPU 使用率?

答案1

您的記憶體不足且系統正在崩潰。沒有足夠的可用記憶體來將所有需要的進程頁面保存在記憶體中,因此作業系統必須釋放一些頁面才能從磁碟載入所需的頁面。由於沒有交換空間,要釋放的頁面無法寫入交換空間,因此唯一的選擇是丟棄只讀代碼頁或縮小緩衝區高速緩存。當執行前進到被丟棄的頁面時,必須再次讀入 RAM,但會犧牲其他頁面。在某些時候,問題會變得非常嚴重,以至於大部分時間都花在等待從磁碟載入頁面上,並且很少有 CPU 週期可用於有用的工作。

嘗試添加一些交換,儘管這可能有幫助,也可能沒有幫助,這取決於進程的負載模式。

答案2

可能是掛載點問題。當系統嘗試掛載當時不可用的掛載點時,它將開始增加系統負載,儘管您可能不會遇到某些進程囤積 CPU。

嘗試:

  1. 運行一下mount,看看是否有某個掛載點當時無法到達。
  2. 檢查/etc/fstab啟動時定義的所有安裝點,並查看當時是否無法到達其中任何一個。

相關內容