Linux

如何隨著時間的推移監控和記錄程序的記憶體/cpu使用情況?

  • April 26, 2015

我正在尋找一種診斷問題的方法,例如交換死亡,其中一個膨脹的記憶體程序填滿交換並殺死整個機器(例如 apache)。

我已經在使用仙人掌,我可以設置 nagios(雖然寧願不)或 munin,但據我所知,他們無法記錄單個程序的使用情況——只是整體狀態。

我知道我可以每 30 秒滾動一次 >> 到某個文件的腳本,但我想看看是否已經存在現有的成熟解決方案。

同樣,理想情況下它會:

  • 每 N 秒記錄一次程序的記憶體使用情況
  • 每 N 秒記錄一次程序的 CPU 使用率
  • 支持圖表和歷史
  • 支持平均值 - 比如 mysqld 在最後一天使用了 43% 的 CPU,平均 400MB 記憶體
  • 自由和開源

程序名稱不是也不應該提前知道的——這個想法是讓它監控,然後查看最嚴重的違規者。

我的系統是 Linux (OpenSUSE)。

如果您只想要最嚴重的違規者,請考慮top在批處理模式下以相對較長的時間間隔(60 秒以上)執行。您可能需要不止一次top執行才能擷取多個資源上的頂級違規者。我已將系統配置top為在資源被過度使用時執行幾個週期。

考慮sar以批處理模式執行以擷取資源使用率。我意識到這是基於伺服器的,但它有助於確定問題發生的時間。

執行munin並啟用通知。這可能讓您有機會進入並觀察伺服器宕機。您可能能夠在問題出現之前糾正它。

對於記憶體洩漏,交換使用量的穩定增加表明存在問題。我曾經看到一個伺服器在幾天內慢慢當機。問題服務是一個監控其他程序記憶體洩漏的程序。系統管理員一直堅持不斷增加的交換使用量不是問題,直到伺服器停止響應。

您可能會發現,cfengine異常檢測可用於觸發腳本以在出現問題時擷取系統狀態。除了使用最多資源的程序之外,您可能還需要大量資訊。對於突然湧入的使用,您可能需要一個網路連接列表(按地址而不是名稱)。記憶體使用也很有用。

引用自:https://serverfault.com/questions/163563