- 始終踐行費曼學習法
- 理解系統知識原理
- 掌握性能分析工具
- 多實踐,多思考,多提問
- 僅記錄我的的學習記錄,歡迎指點糾正
CPU使用率:單位時間內CPU使用狀況的統計,值以%表示
節拍率:每秒鐘的時間中斷次數。內核節拍率(HZ,可配置),用戶空間節拍率(USER_HZ ,固定不可變)php
公式:nginx
查詢/proc/stat
docker
USER_HZ
即10ms
沒有看到%wait,顯示區域過小,在文件最下面apache
可分析系統的各類事件和內核性能,還能夠分析指定應用程序的性能問題性能優化
須要關注的內容併發
Samples
:採樣數event
:事件類型Event count
:事件總數量Overhead
:指該符號的性能事件在全部採用中的比例Shared
:指該函數或指令所在的動態共享對象,如:內核、進程名、動態連接庫名等Object
:動態共享對象的類型curl
[.]
表示用戶空間的可執行程序、或者動態連接庫[k]
表示內核空間Symbol
:表示符號名,即函數名,當函數未命名時用16進制地址表示3.1.二、perf record
離線保存系統的性能信息,按Ctrl+C終止採樣函數
3.1.三、perf report
解析perf record
保存的採樣信息php-fpm
在第一臺虛擬機上執行下面的命令來運行Nginx和PHP的服務工具
# docker run --name nginx -p 10000:80 -itd feisky/nginx # docker run --name phpfpm -itd --network container:nginx feisky/php-fpm
第二個終端使用curl訪問http://[VM1的IP]:10000,確認Nginx已經正常啓動。你應該能夠看到It works!的響應。
測試虛擬機的ip地址192.168.153.132
接着,咱們來測試一下,這個Nginx服務的性能。在第二個終端運行下面的ab命令
# 併發10個請求測試Nginx性能,總共測試100個請求 ab -c 10 -n 100 http://192.168.153.132:10000/
在第二個終端,將測試的請求總數增長到 10000
# 併發10個請求測試Nginx性能,總共測試10000個請求 ab -c 10 -n 10000 http://192.168.153.132:10000/
這裏能夠看到,系統中有幾個 php-fpm 進程的 CPU 使用率加起來接近 200%;而每一個 CPU 的用戶使用率(us)也已經超過了 98%,接近飽和。
這樣,咱們就能夠確認,正是用戶空間的 php-fpm 進程,致使 CPU 使用率驟升。
接下來,咱們使用perf分析是哪一個函數致使
# -g開啓調用關係分析,-p指定php-fpm的進程號45943 $ perf top -g -p 45943
拷貝出 Nginx 應用的源碼,看看是否是調用了這兩個函數
# 中止原來的應用 $ docker rm -f nginx phpfpm # 運行優化後的應用 $ docker run --name nginx -p 10000:80 -itd feisky/nginx:cpu-fix $ docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:cpu-fix
使用dockerd命令,可查看具體錯誤緣由