OOM(Out Of Memory)是什麼?

不会跳舞的胖子發表於2024-10-08

node_vmstat_oom_killPrometheusnode_exporter 中用於監控記憶體管理的一項指標。這個指標表示系統中由於記憶體不足(Out Of Memory, OOM)而被殺死的程序次數

OOM(Out Of Memory)是什麼?

當系統的實體記憶體和交換空間耗盡時,作業系統會啟動 OOM Killer(Out Of Memory Killer),選擇並強制殺死某個佔用大量記憶體的程序,以釋放記憶體供系統繼續執行。OOM 事件通常發生在系統面臨嚴重記憶體壓力時,這時一些程序會被迫終止,避免系統完全崩潰。

node_vmstat_oom_kill 具體檢測的內容

node_vmstat_oom_kill 監控的是系統中被 OOM Killer 殺死的程序的累計次數。當系統發生記憶體不足時,OOM Killer 會選擇某些程序進行終止,這個指標會遞增,顯示 OOM Killer 成功殺死了多少個程序。

關鍵點:

  • node_vmstat_oom_kill 是一個計數器:它的值表示自系統啟動以來,OOM Killer 殺死的程序次數,而不是正在被殺死的程序數量。因此,如果你監控到這個值的增加,說明系統最近發生了記憶體不足的情況。

  • 記憶體壓力或資源不足的訊號:當 node_vmstat_oom_kill 頻繁增加時,通常意味著系統面臨嚴重的記憶體不足,可能需要增加實體記憶體、減少記憶體佔用程序,或者檢查是否有記憶體洩漏的問題。

如何應對 OOM:

  1. 監控記憶體使用:可以使用 Prometheusnode_exporter 監控系統的記憶體使用情況,包括總記憶體、可用記憶體、快取和交換空間等資訊。指標如 node_memory_MemAvailable_bytes 可以幫助你瞭解當前系統的記憶體壓力。

  2. 分析 OOM 事件

    • 使用 dmesg 命令檢視 OOM Killer 的日誌,確認哪些程序因為 OOM 而被殺死。例如:
      dmesg | grep -i "out of memory"
      你可以檢視哪些程序在 OOM 事件中被終止,以及記憶體使用情況。
  3. 調整系統記憶體設定

    • 增加實體記憶體或調整虛擬記憶體(swap)的大小,以避免頻繁觸發 OOM。
    • 最佳化記憶體使用,關閉或調整那些記憶體佔用較大的程序。
  4. 調整 OOM Killer 行為

    • 可以透過調整程序的 oom_score_adj 值來更精細地控制哪些程序應該在 OOM 情況下優先被殺死。

其他相關指標

  • node_memory_MemAvailable_bytes:系統中當前可用的記憶體量。
  • node_memory_SwapFree_bytes:系統中空閒的交換空間量。
  • node_vmstat_pgmajfault:重大頁面錯誤的次數,通常意味著系統頻繁使用交換空間,可能預示著即將發生 OOM。

總結

node_vmstat_oom_kill 是用於檢測主機上由於記憶體不足而被 OOM Killer 殺死的程序次數的指標。如果發現該指標的值不斷增加,說明系統的記憶體資源不足,需要檢查記憶體使用情況,並採取措施避免 OOM 事件的頻繁發生。

相關文章