一 平均負載是什麼?
- 平均負載時的單位時間,是系統處於可運行狀態和不可中斷情況的平均進程數,總之爲平均活躍的進程數。怎麼驗證這是對的呢。使用man uptime如下圖所示。
- 那麼什麼是不可中斷的狀態和可運行狀態呢
不可中斷的狀態,顧名思義是這個狀態不要打斷我,打斷我就是搞事情,不如網絡一下就不通了。
可運行狀態,也就是這個進程可能是在使用cpu或者在排隊等着要使用cpu。
–不可中斷進程 | 處於內核態的關鍵進程。從ps中我們看到的是D狀態 |
---|---|
–可運行狀態 | 正在使用cpu或者正在等待cpu,可以通過ps -ef看到的狀態爲R狀態的進程 |
二 平均負載和cpu的關係?
-
剛纔知道了是平均的活躍進程數,那麼最理想的是每個cpu剛好佔用一個進程,這樣子就充分利用了。如果是有兩個cpu的情況下。
- 在只有2個cpu系統上,cpu剛好被完全佔用 - 在4個cpu系統上,那麼cpu有一半是空閒的 - 在1個cpu上,就會出現打架競爭的關係,有一半的進程可能爭取不到cpu。
-
平均負載多少纔算合理的呢
(1) 先查看有幾個cpu
方法1:top 輸出的詳細含義後面有介紹
方法2: cat /proc/cpuinfo /proc是用戶態到內核態的橋樑
方法3:grep ‘model name’ /proc/cpuinfo | wc -l
(2) 知道了cpu數,然後通過uptime命令查看平均負載值
三 在Linux中使用什麼工具查看系統負載情況?
- uptime工具
(1) uptime使用
(2) uptime命令輸出的參數含義(主要是最後三個參數)
- top工具
(1) top使用
(2) top命令輸出的參數含義
1)其中第一行包括系統的當前時間(21:49:34),自linux操作系統啓動運行以來累計運行時間(0分鐘),目前登錄到linux操作系統的用戶數(1個),以及系統運行在最近1分鐘,5分鐘和15分鐘內系統運行的平均負載。
2)第二行是關於進程的統計信息,包括系統中現有進程的總數(137),當前正在運行的進程數量(3),處於休眠狀態的進程數量(134),處於暫停狀態的進程數量(0),處於殭屍狀態的進程數量(0)。
3)第三行是關於CPU的統計信息,CPU處於用戶模式(66),CPU處於系統模式(33),CPU處理其優先級經nice值調整過的用戶進程的時間量所佔百分比(0),CPU處於空閒狀態(0),CPU處於等待I/O狀態(0.7),CPU處理硬件中斷狀態(0),CPU處理軟件中斷狀態(0.3),CPU處理st(Steal Time)狀態(0)。
4)第四行是關於內存的統計信息,系統配置的物理內存總量,已用內存數量,空閒內存數量,用作緩衝區的內存數量。
5)第五行是關於交換區的統計信息,系統配置的交換區總量,已用交換區數量,空閒交換區數量,用作緩衝區的交換區數量。
四 平均負載和cpu使用率
- 平均負載高了,就認爲cpu使用率高了?
不一定。因爲cpu使用(單位時間cpu繁忙程度),包括正在使用cpu的進程和等待cpu和等待io的進程。
cpu密集:大量進程使用cpu
io密集:等待io也會導致平均負載升高,但是cpu的使用率不一定高
五 兩個案例
- 案例1 模擬cpu密集場景
(1) 先安裝咋們需要的軟件包。
(2) 使用xshell打開三個窗口
第一個窗口:stress --cpu 1 --timeout 600 模擬一個cpu使用100%的場景
第二個窗口:運行uptime查看負載 watch -d uptime(watch可以動態觀察命令執行情況)
第三個窗口:mpstat查看cpu使用率情況(mpstat -P ALL) 5.監控所有的cpu,5代表的每5秒輸出一下結果
分析:
從窗口2可以知道,1分鐘的平均負載很快超過了1,但是iowait爲0.所以平均負載升高的主要原因應該是cpu使用率爲98%所致
2 案例2 模擬8個進程
第一個窗口 模擬IO壓力,執行sync stress -c 8 8 --timeout 600
第二個窗口 uptime
第三個窗口 mpstat查看cpu使用率 midstat -u 5 1
分析:
一個cpu被8個進程在爭搶
六 總結
1 可以通過uptime命令查看系統的基本整體性能。
2 平均負載的結果可能是cpu密集進程導致也可能是IO繁忙導致
3 學習工具midstat和stress