linux系能分析和瓶頸查詢
1.在top裡輸出loadaverage aa bb cc或者 cat /proc/loadavg,在一定時間內程序平均等待時間,如果這個引數值高,說明系能負載高.
2.程序為什麼會等待執行?
多工的OS,程序執行都是分時被排程 A-B-核心-A 過程
程序的狀態(ps auxw) 1.TASK_RUN(可被排程執行) ,2.可中斷等待(長期時間等待IO),3.不可中斷IO(如讀取
磁碟資料) 4.暫停(不回覆不可被排程),5.殭屍程序,
只有1和3可以被核心排程到cpu執行, loadaverage裡的等待也只跟1,3有關
這樣就可以看出 負載高---->程序等待多---->有大量1,3兩個狀態程序導致---->1是等待cup,3是等待io
---->當cup負載或者IO負載會造成系統負載高,造成系統瓶頸
3. 什麼導致cup和io高,那些程序cup消耗高
1.ps(ps aux | sort -k3nr | head -n 5)和top命令
top查詢到使用cup(%cup列)最高的程序
top -H -p 14094 (-p監控指定程序 -H檢視程序裡各個執行緒狀態) 14870
ps -efL
2.vmstat 判斷是cup還是io的負載
b列高,說明等待的程序多
swap列頻繁變化說明記憶體不足
io列變動頻繁問起高說明IO可能是瓶頸 ,可在分析bi(磁碟讀),bo(磁碟寫)
3.可使用iostat分析io是否為瓶頸 ,可檢視%idle列,如果該列很小,說明io很頻繁,可能為io的瓶頸
4.如果分析瓶頸是cup還是io
如果io,swap,memory都比較小,cup負載高說明在密集計算下cup的邏輯計算能力不足
如果在vmstat裡free很小,si,so值很大,說明系統能存不夠
如果cup使用率低,vmstat的b列值比較大,iostat裡%idle比較小,說明是io的瓶頸
5.程式碼級的分析,分析熱點函式呼叫測試,每次呼叫花費時間
使用工具gpref
搜尋
複製