监控某段时间特定进程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使用情况_启动过程


查看每秒钟的进程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使用情况展示出来.

监控某段时间特定进程CPU使用情况_启动过程_02