效能分析(2) 應用程式 CPU 使用率過高案例

2022-01-19 10:16:16 字數 2411 閱讀 6377

效能分析小案例系列,可以通過下面鏈結檢視哦

併發 10 個請求測試 vm1 的 nginx 效能,總共測試100個請求

從 ab 的輸出結果可以看到,nginx 能承受的每秒平均請求數只有14.73(這也太辣雞了吧)

那到底是**出了問題呢

接下來,我們將通過一系列的命令來觀察**出問題了

併發 10 個請求測試 vm1 的 nginx 效能,總共測試10000個請求

輸入後,按1,檢視每個 cpu 的使用率

結果分析在 vm1 終端執行 perf 命令

perf record -g -p 84408
錄製約 30s 後,ctrl+c 終止程序,然後可以在當前目錄下看到 perf.data 檔案

然後執行下面命令,分析報告(perf.data)

perf report
按方向鍵可上下切換,有+的按回車鍵可以展開

結果分析

最終是關係到sqrtadd_function這兩個函式

找到 sqrt 函式

找到 add_function 函式

會發現找不到,因為 add_function 是 php 內建函式

檢視 index.php 原始碼

<?php 

//test only.

$x = 0.0001;

for ($i = 0; $i

<= 1000000; $i++)

echo "it works!"

可以看到,這裡有乙個迴圈很多次的**段

解決方法

找到問題的根源,就可以快速解決了,刪除迴圈**塊

<?php 

echo "it works!"

其實有一條命令更方便檢視函式

那為啥我要用 perf record 然後再用 perf report 呢

因為如果沒有 perf 原始碼的話,是無法讀取到 php 的函式,只會顯示一堆十六進製製碼

vm2 終端再次執行 ab 命令

結果分析

每秒請求數突飛猛進的公升到 2500,比之前的 14 好多了

使用 ab 短時間壓測,發現伺服器效能低下,tps 比較低

使用 ab 長時間壓測,讓伺服器保持乙個高負載的狀態,方便排查問題

通過top命令監控系統資源情況,發現使用者態的 cpu 使用率(us)很高,且程序列表中發現幾個程序的 cpu 使用率特別高,都是同乙個 php 程序

通過perfrecord命令錄製程序一段時間

通過perf report檢視錄製程序的結果資料,可以分析 php-fpm 程序到底是哪個函式導致 cpu 使用率高

找到 add_function、sqrt 函式

通過grep命令確認函式是在 index.php **檔案中

檢視 index.php 檔案的原始碼,確認問題**塊

刪除問題**塊,重新壓測,每秒平均請求數有了質的飛公升,成功解決問題

效能優化 CPU使用率

usr 使用者態cpu時間 nice 低優先順序使用者態cpu時間 system 系統態cpu時間 idle 空閒時間 iowait 等待io的時間 irq 硬中斷的時間 softirq 軟中斷的時間 steal 當系統執行在虛擬機器中時,被其他cpu占用的時間。gust 通過虛擬化,執行其他作業系...

Linux 系統 CPU 使用率簡單分析

cpu 使用率是單位時間內 cpu 使用情況的統計,以百分比的方式展示。為了維護 cpu 時間,linux 通過事先定義的節拍率 核心中表示為 hz 觸發時間中斷,並使用全域性變數 jiffies 記錄了開機一來的節拍數。每發生一次時間中斷,jiffies 的值就加 1。linux 通過 proc ...

如何減低php程式的cpu使用率?

xdebug確實挺好能找到你php程式的瓶頸 但是最好在測試機上用xdebug除錯,因為xdebug也會影響效能 還有一點當xdebug不用的時候就把他關掉否則他會一直記log直到你的硬碟被佔滿 我遇到過這個問題 下面是一些php效能優化,需要注意的地方 0 用單引號代替雙引號來包含字串,這樣做會更...