Linux
如何隨著時間的推移監控和記錄程序的記憶體/cpu使用情況?
我正在尋找一種診斷問題的方法,例如交換死亡,其中一個膨脹的記憶體程序填滿交換並殺死整個機器(例如 apache)。
我已經在使用仙人掌,我可以設置 nagios(雖然寧願不)或 munin,但據我所知,他們無法記錄單個程序的使用情況——只是整體狀態。
我知道我可以每 30 秒滾動一次 >> 到某個文件的腳本,但我想看看是否已經存在現有的成熟解決方案。
同樣,理想情況下它會:
- 每 N 秒記錄一次程序的記憶體使用情況
- 每 N 秒記錄一次程序的 CPU 使用率
- 支持圖表和歷史
- 支持平均值 - 比如 mysqld 在最後一天使用了 43% 的 CPU,平均 400MB 記憶體
- 自由和開源
程序名稱不是也不應該提前知道的——這個想法是讓它監控,然後查看最嚴重的違規者。
我的系統是 Linux (OpenSUSE)。
如果您只想要最嚴重的違規者,請考慮
top
在批處理模式下以相對較長的時間間隔(60 秒以上)執行。您可能需要不止一次top
執行才能擷取多個資源上的頂級違規者。我已將系統配置top
為在資源被過度使用時執行幾個週期。考慮
sar
以批處理模式執行以擷取資源使用率。我意識到這是基於伺服器的,但它有助於確定問題發生的時間。執行
munin
並啟用通知。這可能讓您有機會進入並觀察伺服器宕機。您可能能夠在問題出現之前糾正它。對於記憶體洩漏,交換使用量的穩定增加表明存在問題。我曾經看到一個伺服器在幾天內慢慢當機。問題服務是一個監控其他程序記憶體洩漏的程序。系統管理員一直堅持不斷增加的交換使用量不是問題,直到伺服器停止響應。
您可能會發現,
cfengine
異常檢測可用於觸發腳本以在出現問題時擷取系統狀態。除了使用最多資源的程序之外,您可能還需要大量資訊。對於突然湧入的使用,您可能需要一個網路連接列表(按地址而不是名稱)。記憶體使用也很有用。