CPU使用率


一.負載

而 CPU 使用率,是單位時間內 CPU 繁忙情況的統計,跟平均負載並不一定完全對應。比如:

  • CPU 密集型進程,使用大量 CPU 會導致平均負載升高,此時這兩者是一致的;
  • I/O 密集型進程,等待 I/O 也會導致平均負載升高,但 CPU 使用率不一定很高;
  • 大量等待 CPU 的進程調度也會導致平均負載升高,此時的CPU使用率也會比較高。

安裝
yum -y install perf

查看使用最多的函數
perf top

分別是采樣數(Samples)、事件類型(event)和事件總數量(Event count)

第一列 Overhead ,是該符號的性能事件在所有采樣中的比例,用百分比來表示

第二列 Shared ,是該函數或指令所在的動態共享對象(Dynamic Shared Object),如內核、進程名、動態鏈接庫名、內核模塊名等

第三列 Object ,是動態共享對象的類型。比如 [.]表示用戶空間的可執行程序、或者動態鏈接庫,而 [k] 則表示內核空間

最后一列 Symbol 是符號名,也就是函數名。當函數名未知時,用十六進制的地址來表示

1.持續采樣,按 Ctrl+C 終止采樣
perf record

2.示類似於 perf top的報告
perf report

-g展開調用關系,-p指定進程
perf top -g -p 21515

只熬到占用率最多的函數,對函數在源碼進行grep,找到有問題的部分。

二.找不到進程

1.總使用率高,但進程使用率很低,6個進程,但nginx和php-fpm均是sleep,stress才是運行的進程。

2.查看stress進程,發現不存在,進程關閉后又啟動了一個新的,說明一直在關閉啟動
pidstat -p 24344

第一個原因,進程在不停地崩潰重啟,比如因為段錯誤、配置錯誤等等,這時,進程在退出后可能又被監控系統自動重啟了。

第二個原因,這些進程都是短時進程,也就是exec 調用的外面命令。這些命令一般都只運行很短的時間就會結束,你很難用top 這種間隔時間比較長的工具發現。

3.查看相應進程,找到父進程
pstree | grep stress

可以看到是php-fpm的子進程

4.查看php源碼
grep stress -r index.php

5.記錄性能事件,等待大約 15 秒后按 Ctrl+C 退出
perf record -g

6.查看報告
perf report

stress占用77%使用,主要函數是random函數,查看源碼,分析並改善函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM