效能測試瓶頸之CPU問題分析與調優

刑之风發表於2024-08-05

一、CPU的簡介

  • CPU概念:CPU(中央處理器:Central Processing Unit),是一塊超大規模的積體電路,是計算機的運算核心【拿到資料後先計算】和控制核心【然後再根據計算結果去控制】。
  • 功能:主要是解釋計算機指令以及處理計算機軟體中的資料。電腦中所有操作都由CPU負責讀取指令,對指令譯碼並執行指令的核心部件。
    • 計算機程式編譯後 0101二進位制程式碼,CPU 接受到這個指令,解釋指令拿到資料,處理資料。
  • CPU由3個模組組成,三個部分由內部匯流排連線起來:
    • 控制單元:根據計算結果去控制資料的流向,把記憶體的指令、資料讀入暫存器,控制計算機
    • 運算單元:拿到資料先計算資料
    • 儲存單元: 臨時的資料儲存在儲存單元,比磁和-記憶體更小,速度更快。

二、CPU的資訊檢視命令

搭建好效能測試環境後,進行效能測試之前,最好能先去看一下伺服器CPU的基本資訊和引數

1、檢視物理CPU的個數: cat /proc/cpuinfo

透過上圖: 這個虛擬機器的物理cpu 2個,每個物理cpu的邏輯CPU個數為1個,所以邏輯CPU的個數就是2個。

2、可以直接用命令: cat /proc/cpuinfo| grep "processor"| wc -l 檢視邏輯CPU的個數。

wc -l: wc 是一個命令,用於計算檔案中的位元組數、字數和行數。-l 選項告訴 wc 只計算行數。

3、透過 lscpu 命令檢視:顯示CPU製造商、架構、CPU數量、型號、主頻以及快取等資訊。

  • Sockets = 物理cpu
  • Cores per Socket = 一個插槽上CPU核數
  • Threads per core = 每個核上超執行緒數
  • CPUs=邏輯cpu

三、CPU關注效能指標

關注指標1: CPU使用率

CPU使用率是我們最直觀能看到的指標,所以會優先去關注。CPU利用率行業內標準是一般不要超過75%,如果超過了就需要分析原因,並找到問題和調優了。

CPU使用率=非空閒時間佔總CPU時間的百分比, 越高說明CPU越繁忙,就可能需要進行效能問題分析和調優。

引數:

%us:使用者 CPU,比如java程式,應用程式等:使用者態使用CPU的百分比(user)。使用者CPU使用率高,通常說明有應用程式比較繁忙。
%sy:系統CPU:表示CPU在核心態執行的時間百分比。系統CPU 使用率高,說明核心比較繁忙。
%iowait:等待I/O:表示等待I/O的時間百分比。iowait高,說明系統與硬體裝置的I/O 互動時間比較長,比如跟鍵盤、網路卡、顯示器等互動。

ni【軟/硬中斷】:分別表示核心呼叫軟中斷處理程式、硬中斷處理程式的時間百分比。它們的使用率高,通常說明系統發生了大量的中斷。 (1)當CPU的時間分片正在處理某個任務還沒完成時鐘時間的時候,突然收到硬中斷或軟中斷指令,CPU被打斷需要去響應,才能繼續執行任務; (2)如果ni引數很高,說明中斷的數量很多,說明CPU不停的被打擾,需要分析是什麼中斷。一般ni比較高的情況比較少,不過ni高也會導致
sy【核心佔比】比較高,是環環相扣的,要能分析。 %st/gu:steal/guest:在虛擬化環境中會用到的竊取CPU使用率(steal)和客戶CPU使用率(guest),分別表示被其他虛擬機器佔用的CPU
時間百分比,和執行客戶虛擬機器的CPU時間百分比。
這兩個一般比較低,不會成為cpu的瓶頸 不太需要關注

%id:空閒 CPU百分比,CPU使用率 = (100-id)%
比較簡單的演算法: 100% - id% = CPU使用率

關注指標2:平均負載

平均負載指系統的平均活躍程序數,一個時間段內平均有多少程序數在活躍,跟cpu核數做比較,算出繁忙情況;這是伺服器效能的重點關注值,一般CPU的使用率高的話,平均負載也是高的。  

主要包括三個數值,過去1、5、15鐘的平均負載。可以透過這三個值看到負載整體的趨勢。

1 逐步降低,是CPU後來越來越空閒; 逐步增加,CPU越來越繁忙; 或者持平,就是CPU穩定。

2 理想情況下,平均負載=邏輯 CPU個數,這表示每個CPU都恰好被充分利用;如果大於邏輯 CPU 個數,就表示負載較重;如果平均負載的值高於CPU的3-5倍 ,那麼很有可能CPU存在瓶頸,就需要分析和調優。

關注指標3:上下文的切換cs

系統核心和應用儲存共用CPU的核心,就會需要不停的爭搶資源,就會出現上下文切換。

上下文切換多了不是好事兒,過多的上下文切換,會將原本執行程序的CPU時間,消耗在暫存器、核心棧以及虛擬記憶體等資料的儲存和恢復上,很少有時間真正計算和處理資料,減少和縮短了程序真正執行的時間,通常會導致CPU核心【sy】消耗資源比較高,會成為效能瓶頸,需要最佳化。

四、效能的基本Linux命令

1、top命令:常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況

第一行資料:

1 當前系統時間,啟動執行了多長時間

2 [2 users] 有多少個終端使用者連線, 不代表多少個賬戶 【同一個賬戶 多個終端也算】

3 [load average]:伺服器效能的重點關注值,系統過去1分鐘的平均負載、 過去5分鐘的平均負載、 過去15分鐘的平均負載
  如果平均負載大於CPU數量,甚至達到3- 5倍cpu數量,說明系統負載非常大了。這個時候才會需要去觀察下面的詳細資料分析原因。

第二行資料:預設是程序數,可以切換為執行緒數

1 總程序數,正在執行的程序數,休眠的程序數 。

2 按下H, 切換為 Threads 當前匯流排程數 。

第三行資料:CPU的使用情況,這個是重點。

pid 程序id
USER 程序的歸屬者, 這個程序啟動使用者
PR 程序優先順序,數字越大優先順序高的話可以優先使用資源 ----效能不太關注 影響不大
NI 程序優先順序切換,跟PR共同決定了程序的優先順序 ---效能不太關注 影響不大
VIRT: 這個程序分配的虛擬記憶體
RES: 實際實體記憶體
SHR :共享記憶體會詳細講。
S: status,程序的狀態,可以是R S 等
%CPU 這個程序佔用了多少的cpu使用率 -----這個數值,在CPU為多核時候,是可以超過100
    程序列表中,預設排序規則,是根據 %CPU 數值從高到低的排序
    如果某個程序佔用CPU高於75% 需要單獨拎出來分析
%MEM 這個程序佔用記憶體率,後面講解。
TIME+: 這個程序佔用CPU的總的時間,如果這個程序經常需要CPU進行計算和處理,這個時間就會很大。
COMAND: 這個程序透過哪個命令啟動的。

2、mpstat:程序相關的統計報告資訊,跟top命令裡資訊類似。

這個命令Linux系統不自帶,需要安裝,安裝命令 : yum install -y sysstat

mpstat 1 10 : 1s重新整理一次資料,實時監控工具,主要報告與cpu相關統計資訊,這個CPU是所有CPU的平均整合情況;總共列印10次。

3、pidstat:監控全部或指定程序的某個程序檢視cpu、記憶體、執行緒、裝置io等資源佔用情況和上下文切換資訊。重點在於上下文切換

1 同樣不是系統自帶的命令,需要額外安裝: yum install sysstat -y

2 監控全部或指定程序的cpu、記憶體、執行緒、裝置io等資源佔用情況和上下文切換資訊,用來實時檢視程序的CPU、記憶體、I/O以及上下文切換等指標資訊

3 一般會加一些引數來使用pidstat命令:pidstat -u -w -p pid ,過濾指定的程序的資訊顯示。

  -u: CPU的資訊,-w【switch】,-p 【指定程序id】

  這個命令裡我們會重點看上下文切換資訊,上下文切換包括資源上下文切換和非資源切換:

  • cswch/s :自願上下文切換 :,資源不夠資源切換
  • nvcswch/s:非自願上下文切換 ,時鐘週期+中斷等被迫切換

4 如果這個上下文切換高,那麼CPU的sy一般會比較高, 就需要去定位原因了

4、vmstat :虛擬記憶體統計的縮寫,很強大的命令,基本涵蓋了所有監控的資訊,可對虛擬記憶體、程序、cpu活動進行監控。

vmstat 1 5 : 間隔1秒鐘重新整理一次,總共收集5次 就結束,顯示結果如下:

procs: r 顯示多少程序在等待,b 顯示多少程序在不可中斷的休眠
memory: swpd 顯示多少塊被換出磁碟,free顯示剩下的空閒塊,buff正在被用作緩衝區的塊,cache正在被用作作業系統的快取
swap: 現在交換活動, si 每秒有多少塊正在被換入記憶體 so正在被換出到磁碟
io: 顯示了多少塊從塊裝置讀取(bi)和寫出(bo),通常反映了硬碟I/O的繁忙程度
system: 顯示每秒中斷(in)和上下文切換(cs)的數量
cpu:顯示所有的cpu時間花費在各類操作的百分比,包括執行使用者程式碼(非核心),執行系統程式碼(核心),空閒以及等待IO

5、iostat 顯示裝置,分割槽和網路檔案系統的CPU統計資訊和輸入/輸出統計資訊

重點的引數:
-c 顯示CPU使用率報告
-d 顯示裝置【磁碟】使用率報告
-k 以每秒千位元組顯示統計報告
-m 以每秒兆位元組顯示統計報告
-x 顯示擴充套件統計資訊

結果顯示:
Device: 磁碟資訊
rrqm/s :讀磁碟佇列數量
wrqm/s 寫磁碟佇列數量
r/s w/s 每秒的讀\寫的請求次數
rMB/s wMB/s 每秒讀\寫磁碟的大小
avgrq-sz 平均請求磁碟扇區數
avgqu-sz 等待佇列的大小
await r_await w_await 等待
svctm 請求用的時間
%util 至少有一個活躍的 讀寫操作的時間佔比

6、dstat 是一個用來替換vmstat、iostat等命令的工具,功能比較全,有彩色的介面

安裝: yum install dstat -y

引數:
-c: cpu監控
-m: 記憶體
-d:disk 磁碟
-n:net 網路
-l: load 系統負載
-y:system ,系統
-r: io
-t: 加上時間顯示

相關文章