如何查看每個進程的歷史使用指標?

如何查看每個進程的歷史使用指標?

我在這裡的第一個傾向是內建到 SAR 中,或是一般的 sysstat 套件中。如果確實如此,我似乎找不到這個解決方案。

我希望看到的是,如果可能的話,最好透過sysstat 看到的是進程使用情況(記憶體、CPU 等)的歷史日誌,其格式與SAR 日誌大致相同(如果還不能透過SAR 檔案以某種方式直接獲得)。我知道監控軟體是可用的,但我更喜歡尋找一個主要是非侵入性的軟體包,並且實際上可以透過 statsd/collectd 相對直觀地解析一些東西。

答案1

將 sar 指令作為後台程序運行。其語法為:

sar -o datafile interval count >/dev/null 2>&1 &

所有資料均以二進位形式擷取並儲存到檔案(資料檔案)中。然後可以透過 sar 指令使用 -f 選項選擇性地顯示資料。設定interval和count參數,以interval秒間隔選擇count記錄。如果不設定count參數,則選擇檔案中儲存的所有記錄。以這種方式收集資料對於表徵一段時間內的系統使用情況並確定高峰使用時間非常有用。

答案2

您可以使用啞 while 循環每 5 分鐘列印一次頂級進程的資源使用情況。

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pcpu | head;
  echo;
  sleep 300;
done

上面將輸出使用 CPU 使用率最多的前 9 個行程。若要取得使用記憶體最多的前 9 個進程,請使用:

while true; do
  date;
  ps -eo pid,ppid,cmd,%mem,%cpu --sort=-pmem | head;
  echo;
  sleep 300;
done

例子

以下範例輸出顯示 apache 顯然是我們最大的 CPU 消耗進程。

Sun Jan 28 23:46:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.7
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.5
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

Sun Jan 28 23:51:28 UTC 2024
  PID  PPID CMD                         %MEM %CPU
25130 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.6
12878 11432 /usr/sbin/httpd -DFOREGROUN  0.2  2.4
23903 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.4
  898 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  902 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
  910 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 8397 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
 9263 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2
23911 11432 /usr/sbin/httpd -DFOREGROUN  0.1  2.2

限制

顯然這很糟糕,因為它只會告訴你瞬間執行命令時的確切時刻的資源使用情況(每 5 分鐘)。

理想情況下,它會告訴您過去一段時間的平均資源使用情況間隔輸出之間的時間。但是,鑑於這個答案已經開放了 7 年,而且還沒有好的答案——有總比沒有好。

讓它在一個screen會話中運行過夜,到早上你就會有一些更好的洞察力(用最少的努力)。

相關內容