Shell-Script

在 Linux ’top’ 命令中,有什麼方法可以跟踪值嗎?

  • April 29, 2015

我正在使用 Linux“top”命令來監控特定程序的 %CPU。由於值每隔幾秒鐘就會不斷變化,有沒有辦法在單獨的文件中或作為圖形表示來跟踪值?是否可以使用任何 shell 腳本來做到這一點?

這個問題的答案可以從簡單的命令到復雜的監控工具,具體取決於您的需要。

您可以從簡單地執行開始top -b -n 1 >> file.txt(-b 用於批處理模式,-n 1 用於執行 top 的單次迭代)並將輸出(附加)儲存在 file.txt 中。您還可以過濾“top”輸出,例如top -b -n 1 | grep init僅查看“init”程序的數據或top -b -n 1 | grep "init" | head -1 |awk '{print $9}'獲取 init 程序數據的第 9 列(CPU 值)。

如果你想在 shell 腳本中使用,你可以:

CPU=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9}')
MEM=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $10}')

或者,單次執行 top:

read CPU MEM <<<$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9 " " $10}')

(請注意,grep、head 和 awk 可以合併到一個 awk 命令中,但為了簡單起見,我使用了單獨的命令)。

我們在此範例中使用了 top,但對於其他指標(檢查sariostatvmstatiotopftop,甚至讀取 /proc/*)還有其他方法。

現在您可以訪問數據(CPU 使用率)。在我們的範例中,我們將其附加到文本文件中。但是您可以使用其他工具來儲存數據,甚至繪製它們:使用 gnuplot/python/openoffice 儲存在 csv 和圖形中,使用 zabbix、rrdtools、cacti 等監控和繪圖工具。有一個很大的監控工具世界允許收集和繪製數據,如 CPU 使用率、記憶體使用率、磁碟 io,甚至自定義指標(mysql 連接數等)。

編輯:最後,為了具體回答您的問題,如果您想輕鬆跟踪更改以進行簡單測試,您可以top -b -n 1 >> /tmp/file.txt在 /etc/crontab 文件中執行,每 5 分鐘執行一次 top (或任何其他時間間隔,如果您更換下面的 /5)。

0-59/5 * * * * root top -b -n1 >>/tmp/output.txt

(如果您只對單個程序數據進行測試,則在上面的命令中使用 grep + head -1)。

注意 output.txt 會增長,所以如果你想每天或每週重置它,你可以用另一個 crontab 條目“rm”它。

引用自:https://unix.stackexchange.com/questions/199315