效能測試必備知識(3)- 深入理解“平均負載”

小菠蘿測試筆記發表於2020-07-16

做效能測試的必備知識系列,可以看下面連結的文章哦

https://www.cnblogs.com/poloyy/category/1806772.html

 

uptime 命令入門

每次發現系統變慢時,通常做的第一件事,就是執行 top 或者 uptime 命令,來了解系統的負載情況

 

六個引數講解

引數 含義
10:08:47 當前時間
up 10:24 系統執行時間
1 user 正在登入使用者數
0.13 過去 1 分鐘的平均負載
0.09 過去 5 分鐘的平均負載
0.03 過去 15 分鐘的平均負載

 

靈魂拷問

平均負載就是單位時間內的 CPU 使用率嗎?上面的0.13,代表 CPU 使用率是13%是嗎?

 

靈魂回答

其實並不是這樣的,我們通過 man uptime 檢視 uptime 命令的解釋

接下來,我們可以進入下一個知識點了

 

什麼是平均負載?

簡單來說

單位時間內,系統處於可執行狀態不可中斷狀態的平均程式數,也就是平均活躍程式數,它和 CPU 使用率並沒有直接關係

 

可執行狀態的程式

正在使用 CPU 或者正在等待 CPU 的程式,在 ps 命令看到的,處於 R 狀態(Running 或 Runnable)的程式

 

不可中斷狀態的程式

  • 正處於核心態關鍵流程中的程式,並且這些流程是不可打斷的
  • 比如:最常見的是等待硬體裝置的 I/O 響應,也就是在 ps 命令中看到的 D 狀態(Uninterruptible Sleep,也稱為 Disk Sleep)的進

 

不可中斷狀態程式的具體栗子

  • 一個進程向磁碟讀寫資料時,為了保證資料的一致性,在得到磁碟迴復前,它是不能被其他程式或者中斷打斷的,這個時候的程式就處於不可中斷狀態
  • 如果此時的程式被打斷了,就容易出現磁碟資料與程式資料不一致的問題

 

總結

  • 不可中斷狀態實際上是系統對程式和硬體裝置的一種保護機制
  • 平均負載可理解成平均活躍程式數
  • 平均活躍程式數,就是單位時間內的活躍程式數

 

平均負載的理想狀態

每個 CPU 上都剛好執行著一個程式,這樣每個 CPU 都得到了充分利用

 

栗子

比如平均負載 = 2時

  • 當系統有 2 個 CPU,意味著所有 CPU 剛好被完全佔用
  • 當系統有 4 個 CPU,意味著有 50% 的 CPU 是空閒的
  • 當系統有 1 個 CPU,意味著一半的程式競爭不到 CPU

 

平均負載為多少時合理

靈魂拷問一

在 uptime 命令的結果裡,那三個時間段的平均負載數,多大的時候能說明系統負載高?或是多小的時候就能說明系統負載很低呢?

 

回答

 

靈魂拷問二

平均負載有三個數值,到底該參考哪一個呢?

 

回答

都要看,三個不同時間間隔的平均值,提供了分析系統負載趨勢的資料來源,可以更全面地瞭解目前的負載狀態

 

參考栗子

  • 1 分鐘、5 分鐘、15 分鐘的三個值基本相同,相差不大:系統負載很平穩
  • 1 分鐘的值遠小於 15 分鐘的值:系統最近 1 分鐘的負載在減少,而過去 15 分鐘內卻有很大的負載
  • 1 分鐘的值遠大於 15 分鐘的值:系統最近 1 分鐘的負載在增加,這種情況需要觀察,因為可能是臨時性的,也可能是持續性;
  • 一旦 1 分鐘的平均負載接近或超過了 CPU 的個數,就意味著系統正在發生過載的問題,這時就得分析調查是哪裡導致的問題,並要想辦法優化了

 

實際栗子

假設在一個單 CPU 系統上看到平均負載為 1.73,0.60,7.98

  • 1 分鐘內:系統有 73% 的超載
  • 15分鐘內:系統有 698% 的超載
  • 從整體趨勢來看:系統的負載在降低

 

靈魂拷問三

在實際生產環境中,平均負載多高時,需要重點關注?

 

回答

  • 平均負載高於 CPU 數量 70% 的時候,就應該考慮分析排查負載高的問題了
  • 一旦負載過高,可能導致程式響應變慢,進而影響服務的正常功能
  • 但 70% 這個數字只是建議,可根據業務變化
  • 最好的辦法還是將系統的平均負載監控起來,然後根據更多的歷史資料,判斷負載的變化趨勢
  • 當發現負載有明細升高趨勢時,比如:負載翻倍了,再去做分析和調查

 

平均負載和 CPU 使用率的關係

提出疑問

平均負載就是平均活躍程式數,那活躍程式數多了,不就等於 CPU 使用率高嘛?

 

回答

  • 前面說到,平均負載時指單位時間內,處於可執行狀態和不可中斷狀態的程式數
  • 這裡包括了:正在使用 CPU 的程式,等待使用 CPU 的程式,等待 I/O 的程式
  • 而 CPU 使用率,是單位時間內 CPU 繁忙情況的統計,跟平均負載並不一定完全對應

 

平均負載和 CPU 使用率的一些小栗子

  • CPU 密集型程式:使用大量 CPU 會導致平均負載升高,此時兩者是一致的
  • I/O密集型程式:等待 I/O 也會導致平均負載身高,但 CPU 使用率不一定很高
  • 大量等待 CPU 的程式排程也會導致平均負載升高,此時的 CPU 使用率也會比較高

相關文章