qt获取cpu使用率_实战火焰图分析CPU使用率解决JAVA应用线上性能问题

8160afee0211636dd9288080de16607a.png

开源项目推荐

Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/httpservlet/dubbo/motan的运行性能统计,并暴露成prometheus等主流时序数据库兼容数据,通过grafana展示趋势。其插件化的架构也非常方便使用者扩展并集成其他开源组件。
请大家给个star,同时欢迎大家成为开发者提交PR一起完善项目。

背景

业务上一个新业务上线,发现CPU使用率较高,我们的业务特点一般是IO密集型,所以一般呈现CPU使用率较低,但是QPS较高的特点,所以对这个特殊的服务进行性能分析,以下是分析过程。

网络性能分析

  • 新应用上线,发现CPU较高,如图所示

da75bed3d0eec3ee60f0cf3d68837bc6.png
  • 从cpu使用率的细节发现%si中断使用率集中在cpu0上,查看中断类型

706d902626d1b2e2f6f93ec0a846c838.png
  • 发现硬中断的处理集中在CPU0上,推断网卡不支持多队列特性

c1275a82a832c18545395f0b94101876.png
  • 果然推断正确,然后决定找两台网卡支持多队列的机器对比性能

8717c342f1a6478d6d5b54d35f2efb30.png
  • 从监控中可以看到,两种机型在P999的接口响应延迟上相差一倍

e6a4f8f90ab423ad9b903686ad9ccf23.png

CPU使用率还没分析

跑题了,前面分析CPU的过程中无意间发现了中断不平均的问题,但并不是我们CPU使用率高的原因,CPU主要还是%us高,回来分析CPU使用率,由于代码不是本人所写,不会直接去分析代码,那样无异于大海捞针,拿出珍藏的perf大法,生成火焰图分析。

CPU火焰图的生成方法参考前面的文章:
- 使用FlameGraph分析JAVA应用性能 - Docker中使用FlameGraph分析JVM应用性能

生成的火焰图如下:http://oss.zrbcool.top/picgo/ad-data-web03.svg

ae800d8cd678ab0c8fed970f92cad10a.png

瓶颈点1

CoohuaAnalytics$KafkaConsumer:::send方法中Gzip压缩占比较高
已经定位到方法级别,再看代码就快速很多,直接找到具体位置,找到第一个消耗大户:Gzip压缩

c3dfe39b1a2c96bbb1a7d157e62b0635.png

瓶颈点2

展开2这个波峰,查看到这个getOurStackTrace方法占用了大比例的CPU,怀疑代码里面频繁用丢异常的方式获取当前代码栈

e4a03e8ea8f523fa9aefd68e36430d38.png


直接看代码

8a9ee039c9e008ba7457b542afa8fd1c.png


果然如推断,找到第二个CPU消耗大户:new Exception().getStackTrace()

瓶颈点3

展开波峰3,可以看到是这个Gzip解压缩

aed1a39193a752e5e98ce0b4db56943d.png


定位到具体的代码,可以看到对每个请求的参数进行了gzip解压缩

51fc77feed8ce095fe2c2a07c44e47f8.png

总结

到此我们就找到了这个应用的三个主要的CPU消耗点,通过火焰图,我们很方便的可以分析到具体代码级别的CPU使用情况,完全可以将应用当做一个黑盒来分析,分析性能之前,我对代码完全不了解的情况下分析到了CPU使用率的性能瓶颈。

后续: 等过几天优化完成后再行对比CPU使用率情况。

作者其他文章

https://github.com/zrbcool/blog-public

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值