性能指標分析--CPU篇(二)

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。