使用阿里 Arthas 工具分析 CPU 飙高( 二 )


[arthas@31126]$ ognl '@org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.User@ADMIN_ID'@Integer[0]需要额外说明的是 , 由于 monitor、trace、watch 等命令是通过字节码增强技术来实现的 , 会在指定类的方法中插入一些切面来实现数据统计和观测,因此诊断结束要执行 shutdown 来还原类或方法字节码,然后退出 Arthas 。
在这个案例中,我们通过 Arthas 工具排查了高 CPU 的问题:

  • 首先,通过 dashboard + thread 命令,基本可以在几秒钟内一键定位问题,找出消耗 CPU 最多的线程和方法栈;
  • 然后,直接 jad 反编译相关代码,来确认根因;
  • 此外 , 如果调用入参不明确的话,可以使用 watch 观察方法入参,并根据方法执行时间来过滤慢请求的入参 。
可见 , 使用 Arthas 来定位生产问题根本用不着原始代码,也用不着通过增加日志来帮助我们分析入参,一个工具即可完成定位问题、分析问题的全套流程 。
对于应用故障分析,除了阿里 Arthas 之外,还可以关注去哪儿的Bistoury :https://github.com/qunarcorp/bistoury工具 , 其提供了可视化界面,并且可以针对多台机器进行管理,甚至提供了在线断点调试等功能 , 模拟 IDE 的调试体验 。




推荐阅读