1.uptime命令
[root@test ~]# uptime
15:35:33 up 108 days, 18:16, 1 user, load average: 0.01, 0.04, 0.05
各列代表的含義
15:35:33 //當前時間
up 108 days, 18:16 //系統運行時間
1 user //正在登錄用戶數
load average: 0.01, 0.04, 0.05 //依次過去1分鐘,5分鐘,15分鐘的平均負載
2.平均負載
平均負載是指:單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,
也就是平均活躍進程數。
所謂可運行狀態的進程,是正在使用CPU或者正在等待使用CPU的進程,也就我們使用ps命令看到的處於R狀態(Running或者Runnable)的進程。
所謂不可中斷狀態的進程,是正處在內核態關鍵流程中的進程,並且這些流程是不可打斷的。比如最常見的是等待硬件設備的I/O響應,也就是使用ps命令看到的D狀態(Uninterruptible Sleep,也稱爲Disk Sleep)的進程。
3.平均負載多少時合理
1.平均負載最理想的情況是等於cpu核數
2.查看系統cpu核數
grep 'model name' /proc/cpuinfo | wc -l
3.使用平均負載的3個值,分析系統負載趨勢
- 如果1分鐘,5分鐘,15分鐘的值基本一樣或者相差不大,說明系統很穩定
- 1分鐘遠小於15分鐘的值,說明系統負載減少,之前負載很大
- 1分鐘遠大於15分鐘的值,說明系統負載增加,着重觀察,如果等於或者超過cpu個數,分析過載原因
4.平均負載和CPU使用率區別
平均負載是單位時間內的可運行狀態和不可中斷狀態的進程數。包含正在使用的CPU的進程和等待CPU,等待IO的進程。
CPU使用率是單位時間內繁忙CPU的統計情況。跟平均負載並不一定完全對應。比如
- CPU密集型進程,使用大量CPU會導致平均負載升高,此時兩者一致
- IO密集型進程,等待IO會導致平均負載升高,但是CPU使用率不一定很高
- 大量等待CPU調度的進程也會導致平均負載升高,此時的CPU使用率也會很高
5.性能工具
安裝:
(1)centos:yum install -y stress sysstat
(2)ubuntu:apt install stress sysstat
介紹:
stress是一個系統壓力測試工具,用作異常進程模擬平均負載升高的場景。
sysstat包含常用的Linux性能工具,用來監測和分析系統的性能。主要使用倆個命令
- mpstats是一個常用的多核CPU性能分析工具,用來實時查詢每個CPU的性能指標以及所有CPU的平均指標
- pidstat是一個常用的進程性能分析工具,用來實時查詢進程的CPU,內存,I/O以及上下文切換等性能指標。
6.實戰
每個場景開4個終端,使用root用戶登錄到同一臺Linux機器,使用uptime命令看一下測試前的平均負載
$ uptime
... load average: 0.00, 0.17, 0.78
場景一:CPU密集型
第一個終端運行stress命令,模擬一個CPU使用率100%的場景
$ stress --cpu 1 --timeout 600
第二個終端運行uptime命令,查看平均負載變化情況
#-d 參數表示高亮顯示變化的區域
$ watch -d uptime
..., load average: 1.00, 0.75, 0.39
第三個終端使用mpstat命令,查看CPU使用率的變化情況
#-P ALL 表示監控所有CPU,後面數字5表示間隔5秒後輸出一組數據
mpstat -P ALL 5
Linux 3.10.0-957.21.3.el7.x86_64 04/21/2020 _x86_64_ (1 CPU)
06:32:20 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
06:32:25 PM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:32:25 PM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
分析:從第二個終端看,1分鐘的平均負載滿滿增加到1,第三個終端看cpu使用率接近100%,iowait確實0%,說明平均負載的升高正式由於CPU使用率100%。到底是哪個進程導致的CPU使用率爲100%,
第四個使用pidstat命令查看
#間隔5秒後輸出一組數據
pidstat -u 5 1
Linux 3.10.0-957.21.3.el7.x86_64 04/21/2020 _x86_64_ (1 CPU)
06:47:18 PM UID PID %usr %system %guest %CPU CPU Command
06:47:23 PM 0 6195 0.00 0.20 0.00 0.20 0 watch
06:47:23 PM 0 10406 99.20 0.00 0.00 99.20 0 stress
可以明顯的看到strees的CPU使用率接近100%。