Linux 性能優化學習筆記--CPU使用率問題排查

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、命令行參數以及執行的結 果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章