CUP分析實戰
一、模擬遠超cpu核數的多進程
模擬工具stress-ng,stress-ng是 stress壓力測試工具的 升級版本
- 使用stress-ng工具來模擬企業中,cpu利用率高的各種情況。
- yum install -y epel-release.noarch && yum -y update
- yum install stress-ng -y
模擬場景:遠超cpu核數的多進程
(( proc_cnt = `nproc`*10 )); stress-ng --cpu $proc_cnt --pthread 1 --timeout 150
命令涵義:nproc
得到是 當前電腦cpu的數量,模擬產生10倍核數的進程,每個進程1個線程,運行150秒
1、top命令觀察到的現象:
- cpu使用率 us+sy 將近100%,有一定的si(中斷)
- loadaverage 過去1分鐘的值很高
- cpus us態值很大,sy有值但很小
- 進程中,新增了了大量stress-ng進程
image.png
2、vmstat命令觀察到的現象
- proc的r隊列值非常大
- system的in(每秒中斷次數) 和 cs(上下文切換次數) 都很大
- free、buff、cache變化不大
image.png
3、pidstat -w 命令觀察到的現象
- stress-ng-cpu這些進程的 nvcswch/s(非自愿上下文切換)比較高
image.png
總結:我只有4個cpu,但是在有大量的進程要使用cpu時,通過vmstat看到 r隊列有大量的隊列等待使用cpu,并且看到了有大量中斷和上下文切換。基本可以確定cpu不夠。
二、模擬場景:單cpu多線程
stress-ng --cpu `nproc` --pthread 1024 --timeout 150
命令涵義:電腦有多少個cpu,就模擬出 cpu數量*1024 這么多線程 運行150秒
1、top命令觀察到的現象:
- cpu使用率 us+sy 將近97%,有3%的si
- loadaverage 過去1分鐘的值很高
- cpus us較小,sy較大
- 進程中,新增了了大量stress-ng-pthre進程
image.png
2、vmstat命令觀察到的現象
- proc的r隊列值非常大
- system的in(每秒中斷次數) 和 cs(上下文切換次數) 都很大
- free變小,cache變大
image.png
3、pidstat -w 命令觀察到的現象
- stress-ng-pthre這些進程的 cswch/s(自愿上下文切換)比較高
image.png
總結:線程上下文切換與進程上下文切換對比
- top命令
- loadavg 都升高
- 進程上下文: us態數值 > sy態數值 (cpu消耗在應用運行進程切換中)
- 線程上下文: us態數值 < sy態數值 (cpu消耗在內核線程切換處理中)
- vmstat命令
- proc: r 有明顯數據(有較多的等待)
- 內存: 線程上下文切換 內存數據有明顯變化(free會變小,catch會變大)
- in\cs: 也是有明顯的數據變化的(中斷和上下文切換都會變多)
- pidstat命令:
- 進程上下文切換:非自愿上下文切換的數據 多于 自愿上下文切換
- 線程上下文切換:自愿上下文切換的數據 多于 非自愿上下文切換
三、模擬大量I/O操作
stress-ng --hdd 1 -i 6 --timeout 150
1、top命令觀察到的現象:
- cpu使用率 id(空閑) 和 wa(等待)較高
- loadaverage 升高
image.png
2、vmstat
- 內存有明顯的變化: 寫操作頻繁,所以,free變小,cache數據變大
- io的bi和bo數據有明顯的數值
image.png
3、iostat -dx 1
- wkB/s和rkB/s 有大量數據,說明現在有大量讀寫操作
image.png