監控某段時間特定進程CPU使用情況
背景
之前一直想找一個進程級別的監控工具
尤其是想能通過prometheus進行監控
但是發現總是很不如人意
node_exporter 的監控只能看到整體的
actuator的無法看到啓動過程中的CPU使用情況.
一直沒有找到一個比較好的方式.
之前一般採用 top -Hp $pid -bn 1 的方式多次查詢來進行查看
但是統計數據比較困難.
最近幫同事看 一個慢的問題 纔想起來. 兩年前自己想學的ebpf
一直沒有深入學習.
perf
perf:
perf是一個性能分析工具,可用於檢測和優化Linux系統中的性能問題。
它能夠收集各種性能數據,如CPU使用率、內存使用情況、磁盤IO和網絡IO等,
從而幫助用戶找出系統中的性能瓶頸。用戶可以使用perf來分析應用程序的性能,
並針對性能問題進行優化。perf工具由Linux內核開發人員開發,
是Linux系統中最常用的性能分析工具之一。
最簡單的使用
之前總結過 flamegraph的用法, 不在複述.
總結一下兩個小方法
監控啓動過程中的比較高的CPU使用
perf top -p $pid
可以看到啓動過程中有大量的zip 相關的指令
說明系統在進行 jar包的讀取與解壓縮
所以IO會影響產品的啓動速度
查看每秒鐘的進程CPU使用情況
perf stat -e task-clock -p $pid
可以查看一段時間內的CPU使用情況
perf stat -e task-clock -p 120007 -I 1000
# time counts unit events
1.000942770 1,094.12 msec task-clock # 1.094 CPUs utilized
2.001466163 1,457.88 msec task-clock # 1.458 CPUs utilized
3.001833373 1,207.22 msec task-clock # 1.207 CPUs utilized
4.002150053 1,370.39 msec task-clock # 1.370 CPUs utilized
5.002495263 1,028.87 msec task-clock # 1.029 CPUs utilized
參數說明
-e 指定監控某些event
-I 指定報告間隔, 單位秒鐘.
-p 指定進程號
需要說明 不指定 -e 的話 還能看到 io 和 cs 的信息
也比較關鍵.
然後可以使用excel將CPU使用情況展示出來.