- 始終踐行費曼學習法
- 理解系統知識原理
- 掌握性能分析工具
- 多實踐,多思考,多提問
- 僅記錄我的的學習記錄,歡迎指點糾正
一、遇到CPU使用率高,但又沒法經過top定位到某個進程時,須要考慮是否短時應用所致使php
如:一、應用自己問題,致使反覆重啓nginx
二、應用經過exec 調用了其餘二進制程序,這些程序運行時間比較短docker
二、使用top工具查看CPU時,須要同時關注其餘參數,好比,運行的進程數,Tasks,%cpuubuntu
三、execsnoop專爲短時程序設計的工具,經過ftrace來實時監控exec()行爲併發
四、經過此次練習,也對docker進行一些簡單命令操做curl
docker ps -a // 查看當前全部的容器
docker images // 全部的鏡像
docker rm containId // 刪除對應的容器
docker cp XXX 複製php-fpm
其中一臺虛擬機A安裝nginx 和PHP應用工具
$ docker run --name nginx -p``10000``:``80``-itd feisky/nginx:sp $ docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:sp
在另外一臺的機器B上,使用 curl 訪問 http://[VM1 的 IP]:10000,確認 Nginx 已正常啓動oop
## 虛擬機A的IP:192.168.153.132 curl http://192.168.153.132:10000/ It works!jasen@ubuntu:~$ ab -v
經過使用ab工具,模擬併發 100 個請求測試 Nginx 性能,總共測試 1000 個請求。
性能
此次,咱們在第二個終端,將測試的併發請求數改爲 5,同時把請求時長設置爲 10 分鐘(-t 600)。這樣,當你在第一個終端使用性能分析工具時, Nginx 的壓力仍是繼續的。
繼續在第二個終端運行 ab 命令:
pid查看進程
從新壓測,而後在第一個終端運行 top 命令,持續觀察一段時間(很重要),下圖只是某個瞬間的狀態:
perf 分析 CPU 性能事件
那麼,怎麼驗證是否有大量的 stress 進程呢?既然 top、pidstat 工具沒法解決問題,嘗試 perf 工具吧,它能夠用來分析 CPU 性能事件。以下:
# 記錄性能事件,等待大約``15``秒後按 Ctrl+C 退出 $ perf record -g # 查看報告 $ perf report
確實,stress 佔了全部 CPU 時鐘事件的 67%。你還能夠經過 enter 鍵展開 + 號位置,查看 stress 的調用棧詳情