CPU使用率解釋:
Linux 作爲一個多任務的操作系統,將CPU時間劃分爲時間片,根據調度算法輪流分配給各個任務使用,性能工具中指標含義
user(us),代表用戶態CPU時間,但不包含nice時間,但包涵guest時間。
nice(ni),代表第優先級用戶態CPU數間,也就是進程的nice值被調整爲1-19之間時的CPU時間;nice取值範圍-20-19,數值越大,優先級越低。
system(sys),代表內核態CPU時間。
idle(id),代表空閒時間,但不包括等待I/O的時間(iowait)。
irq(hi),代表處理硬中斷的CPU時間。
softirq(si),代表處理軟中斷的CPU時間。
steal(st),代表當系統運行在虛擬機中的時候,背其他虛擬機佔用的CPU時間。
guest(guest),代表通過虛擬化運行其他操作系統的時間,也就是運行虛擬機的CPU時間。
guest_nice(gnice),代表以低優先級運行虛擬機的時間。
查看CPU使用率:
查看CPU使用率的工具,最常用的則是top和ps。
top 顯示了系統總體的CPU和內存使用情況,以及各個進程的資源使用情況。
ps 顯示了每個進程的資源使用情況。
top 和 ps 這兩個工具報告的 CPU 使用率,默認的結果很可能不一樣,因 爲 top 默認使用 3 秒時間間隔,而 ps 使用的卻是進程的整個生命週期。
查看進程詳細的情況:pidstat
用戶態 CPU 使用率 (%usr); 內核態 CPU 使用率(%system); 運行虛擬機 CPU 使用率(%guest); 等待 CPU 使用率(%wait); 以及總的 CPU 使用率(%CPU)。
CPU使用率過高解決:
perf 在CPU升高時分析進程的CPU問題,以性能採樣爲基礎,不僅可以分析系統的各種時間和內核性能,還可以用來分析指定應用程序的性能問題。
1⃣️ 命令perf top 可以顯示佔用CPU時間最多的函數或者指令,可以用來查找熱點函數;
第一行包涵三個數據,分別是採樣數samples、事件類型event和事件總數量event count。
第一列 overhead,是該符號的性能事件在所有采樣中的比例,用百分比來表示;
第二列 shared,是該函數或指令所在的動態共享對象,如內核、進程名、動態鏈接庫名、內核模塊名等;
第三列 object,是動態共享對象的類型,如[.]表示用戶空間的可執行程序或者動態鏈接庫,[k]表示內核空間;
第四列 symbol 是符號名,也就是函數名,當函數名未知時用16進制地址來表示。
2⃣️ perf record 和 perf report。 perf top 雖然實時展示系統的性能,但不保存數據,無法用於離線分析。 perf record 提供保存數據功能,保存的數據用 perf report 解析展示。
壓力測試命令: # 併發 100 個請求測試 Nginx 性能,總共測試 1000 個請求2 $ ab -c 100 -n 1000 http://192.168.0.10:10000/
# 併發5個請求,-t 10分鐘 $ab -c 5 -t 600 http://192.168.0.10:10000/
觀測哪個進程導致CPU比較高: top pidstat
查找一個進程的父進程:pstree | grep 進程名
在文件中查找某個命令 grep name -r 文件名
分析 CPU 性能事件:運行 perf record -g 命令 ,並等待一會兒(比如 15 秒)後按 Ctrl+C 退 出。然後再運行 perf report 查看報告 。
execsnoop 是一個專爲短時進程設計的工具。它通過 ftrace 實時監控進程的 exec() 行 爲,並輸出短時進程的基本信息,包括進程 PID、父進程 PID、命令行參數以及執行的結 果。