機器CPU load過高問題排查


load average的概念

系統平均負載定義:在特定時間間隔內運行隊列中(在CPU上運行或者等待運行多少進程)的平均進程數。如果一個進程滿足以下條件則其就會位於運行隊列中:

  • 它沒有在等待I/O操作的結果
  • 它沒有主動進入等待狀態(也就是沒有調用’wait’)
  • 沒有被停止(例如:等待終止)

 

在Linux中,進程分為三種狀態,一種是阻塞的進程blocked process,一種是可運行的進程runnable process,另外就是正在運行的進程running process

進程可運行狀態時,它處在一個運行隊列run queue中,與其他可運行進程爭奪CPU時間。 系統的load是指正在運行和准備好運行的進程的總數

比如現在系統有2個正在運行的進程,3個可運行進程,那么系統的load就是5。load average就是一定時間內的load數量

只要每個CPU的當前活動進程數不大於3那么系統的性能就是良好的,如果每個CPU的任務數大於5,那么就表示這台機器的性能有嚴重問題

 

CPU使用率高並不總是意味着CPU工作繁忙,它有可能是正在等待其他子系統。在進行性能分析時,將所有子系統當做一個整體來看是非常重要的,

因為在子系統中可能會出現瀑布效應。衡量CPU 系統負載的指標是load,load 就是對計算機系統能夠承擔的多少負載的度量,簡單的說是進程隊列的長度。

簡單的例子比如食堂有五個窗口,當有小於五個學生來打飯,五個窗口都能及時處理,但是當學生個數超過5個,必然會出現等待的學生。請求大於當前的處理能力,會出現等待,引起load升高。

Load Average 就是一段時間(1min,5min,15min)內平均Load。平均負載的最佳值是1,這意味着每個進程都可以在一個完整的CPU 周期內完成。

 

cpu load高的排查思路

1. 首先排查cpu使用率高的進程中各線程的cpu使用率,通過命令 ps -Lp pid cu 或者 top -Hp pid

2. ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd 

3.追蹤線程內部,查看load過高對應的thread,jstack pid > stack.out

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM