监控某段时间特定进程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使用情况展示出来.