繼 33節(jié) 2020-09-25cpu使用率分析(一)下 傻咖,今天我們繼續(xù)來講解:
開始新知識前舍咖,我們先來做個小總結(jié)。通過前面幾節(jié)的學(xué)習(xí)铣卡,我們發(fā)現(xiàn)關(guān)于cpu性能指標(biāo)比較多链韭,cpu性能分析工具也比較多,那么實際的工作場景里煮落,主要關(guān)注哪些指標(biāo)呢敞峭?選擇哪些工具快捷的定位問題呢?
(1)cpu關(guān)注的性能指標(biāo)
第一個想到的就是cpu使用率蝉仇,這也是實際性能場景中最常見的一個指標(biāo):cpu使用率旋讹。
根據(jù)cpu上運行任務(wù)就的不同將cpu使用率劃分如下:
用戶態(tài)cpu使用率:表示cpu在用戶態(tài)運行時間占用百分比,此值高轿衔,表明應(yīng)用程序占用比較高沉迹。
系統(tǒng)態(tài)cpu使用率:表示cpu在內(nèi)核態(tài)運行時間的占用百分比。內(nèi)核態(tài)cpu使用率高害驹,說明內(nèi)核態(tài)比較繁忙鞭呕。比如開啟大量
進程(cpu密集型)就會導(dǎo)致內(nèi)核態(tài)升高(因為負(fù)載過高,容易出現(xiàn)進程上下文切換或者硬中斷宛官,而
上下文切換或者硬中斷需要系統(tǒng)調(diào)度葫松,所以內(nèi)核態(tài)升高)。
等待i/o的cpu使用率:通常也稱為iowait底洗,表示等待i/o的時間百分比腋么,iowait使用率高,說明系統(tǒng)與硬件設(shè)備的i/o交互時間
比較長亥揖。
軟中斷和硬中斷的cpu使用率: 表示內(nèi)核調(diào)用軟中斷處理程序的時間占用百分比珊擂。硬中斷處理程序的時
間占用百分比,通常說明系統(tǒng)發(fā)生了大量的中斷费变。
第二個: 平均負(fù)載(load average)
平均負(fù)載是系統(tǒng)的平均活躍進程數(shù)摧扇。
它反應(yīng)了系統(tǒng)的整體負(fù)載i情況,主要包括三個數(shù)值胡控,分別是過去1分鐘扳剿,過去5分鐘,15分鐘昼激。
平均負(fù)載大于邏輯cpu個數(shù)庇绽,就表示負(fù)載過大了锡搜。
第三個:進程上下文切換
上下文切換分為:自愿和非自愿
自愿上下文切換:無法獲取自愿而導(dǎo)致的
非自愿上下文切換:被系統(tǒng)強制調(diào)度。
(2)性能分析工具:
掌握cpu的性能指標(biāo)瞧掺,那么還需要知道耕餐,怎么去獲取這些指標(biāo),也就是工具怎么使用辟狈。
首先(第一個):平均負(fù)載負(fù)載的案例肠缔,先用uptime,查看系統(tǒng)的平均負(fù)載,而在平均負(fù)載升高之后哼转,又用mpstat和pidstat,分別觀察cpu和每個進程cpu的使用情況明未,進一步找出了導(dǎo)致平均負(fù)載升高的進程,也就是我們的壓測工具stres壹蔓。
其次(第二個)是上下文切換:先用vmstat查詢系統(tǒng)的上下文切換次數(shù)和中斷次數(shù)趟妥。
然后通過pidstat,查看進程的自愿上下文切換和非自愿上下文切換;
最后通過pidstat -t ,觀察線程的上下文切換情況佣蓉,找出上下文切換次數(shù)增多的根源是基準(zhǔn)測試工具sysbench披摄。
最后(第三個)是java進程的cpu使用率升高。先從jmeter的聚合報告查看到tps變小勇凭,響應(yīng)時間變大開始疚膊,排除網(wǎng)絡(luò)瓶頸后再使用top命令查看服務(wù)器資源使用情況----》可以看到是java進程導(dǎo)致的。再查看相應(yīng)的線程占用情況虾标,通過線程id定位到相應(yīng)的線程棧的狀態(tài)情況寓盗,最后通過jstack命令定位到是哪個包下面哪個類哪一行代碼導(dǎo)致的性能問題