【人間995】【Linux性能優化】系統的 CPU 使用率很高,卻找不到高 CPU 的應用?

嗶前嗶言

  • 始終踐行費曼學習法
  • 理解系統知識原理
  • 掌握性能分析工具
  • 多實踐,多思考,多提問
  • 僅記錄我的的學習記錄,歡迎指點糾正

一、總結

一、遇到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 個請求。
圖片.png性能

此次,咱們在第二個終端,將測試的併發請求數改爲 5,同時把請求時長設置爲 10 分鐘(-t 600)。這樣,當你在第一個終端使用性能分析工具時, Nginx 的壓力仍是繼續的。

繼續在第二個終端運行 ab 命令:
圖片.png

pid查看進程
圖片.png

從新壓測,而後在第一個終端運行 top 命令,持續觀察一段時間(很重要),下圖只是某個瞬間的狀態:
圖片.png

perf 分析 CPU 性能事件

那麼,怎麼驗證是否有大量的 stress 進程呢?既然 top、pidstat 工具沒法解決問題,嘗試 perf 工具吧,它能夠用來分析 CPU 性能事件。以下:

# 記錄性能事件,等待大約``15``秒後按 Ctrl+C 退出
$ perf record -g
# 查看報告
$ perf report

圖片.png
確實,stress 佔了全部 CPU 時鐘事件的 67%。你還能夠經過 enter 鍵展開 + 號位置,查看 stress 的調用棧詳情
圖片.png

相關文章
相關標籤/搜索