Cpu
CPU 平均負載 + 如何獲得 X 小時歷史的 CPU 平均負載
我們都知道我們可以獲得平均 CPU 負載:
uptime 10:09:22 up 2 days, 1:44, 1 user, load average: 20.01, 20.03, 22.05
但這僅顯示
load average over the last 1 minute is 22.05 load average over the last 5 minute is 20.03 load average over the last 15 minute is 20.01
我們想要一個最近 X 小時的平均負載列表。是否有任何 Linux(我們正在使用 RHEL)命令可以顯示過去 X 小時內平均 CPU 負載的歷史記錄?
您需要為此安裝額外的軟體。您可以使用
sar
(參見https://linux.die.net/man/1/sar)或您選擇的監控系統。
sar -q
將報告負載平均值(除其他外……)$ sar -q 1 5 Linux 4.9.0-9-amd64 (sds-ulm-edv-553-workstation) 09/10/2019 _x86_64_ (2 CPU) 02:04:43 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 02:04:44 PM 0 158 0.00 0.02 0.10 0 02:04:45 PM 0 158 0.00 0.02 0.10 0 02:04:46 PM 0 158 0.00 0.02 0.10 0 02:04:47 PM 0 158 0.00 0.02 0.10 0 02:04:48 PM 0 158 0.00 0.02 0.10 0 Average: 0 158 0.00 0.02 0.10 0
最後一行
Average:
在這裡可能很有趣?您可以為此提供一個文件:
sar -q -f /var/log/sa/fileofyourchoice
然後進一步處理輸出的第 4-6 列。要快速了解“這裡發生了什麼?”,您可能需要一些圖形表示。
不幸的是,我不知道如何sar
通過 GNUplot 管道輸出(或將其交給 grafana …)等以生成有用的東西。好吧,這讓我發癢:-)
生成數據文件…
LANG=C sar -q 1 250 | grep ':' | awk '{ print $1,$4,$5,$6 }' | sed '1d;$d' > datafile.txt
找到最大值:
$ datamash -t ' ' max 2 max 3 max 4 < datafile.txt 2.53 1.55 1.1 $ head -1 datafile.txt | cut -d' ' -f1 20:20:53 $ tail -1 datafile.txt | cut -d' ' -f1 20:25:02
現在創建一個文件
plotting
,您將需要這些值用於xrange
和yrange
:$ cat plotting set title "Load over time" set xdata time set style data lines set term png set timefmt "%H:%M:%S" set format x "%H:%M:%S" set xlabel "Time" set ylabel "Load" set autoscale y set xrange ['20:20:53':'20:25:02'] set yrange ['-0.01':'2.6'] set xtics rotate set output "load_over_time.png" plot "datafile.txt" using 1:2 t "loadavg-1" w lines, "datafile.txt" using 1:3 t "loadavg-5" w lines, "datafile.txt" using 1:4 t "loadavg-15" w lines
$ gnuplot < plotting
現在你可以用`生成一個圖形現在你有一個圖表
load_over_time.png
:如果您有一個監控系統(例如 check_mk),那麼獲取您需要的歷史記錄會容易得多。