Java 性能分析和线上监控-Arthas
什么是Arthas
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
总结来说就是可以查看、修改运行中的 Java 应用。
什么时候需要 Arthas
了解当前 Java 应用的性能
查看当前 Java 应用的瓶颈
监控 JVM 的运行状态
线上修改日志
测试环境直接修改代码
定位应用热点,生成火焰图
Arthas 常用命令小结
help - 查看支持哪些指令
memory - 查看 JVM 内存信息
thread - 查看线程 CPU 使用率
cls - 清空当前屏幕
logger - 查看并修改日志信息
stack - 查看方法的调用栈
watch - 查看方法的调用情况包括参数和返回值
tract - 查看方法的调用栈运行时间
monitor - 统计一段时间内的方法的调用次数、平均运行时间、成功/失败次数
tt - watch的升级版,支持先把方法调用全记录下来,后续再排查
profiler - 生成火焰图
sc/sm/jad/mc/redefine - 线上查找并修改class
Arthas 常用命令示例
查看方法的调用栈(-n 2 表示查看两次)
1
stack com.yjt.ccb.controller.ExchangeController invoke -n 2
查看方法的参数和返回值(-x 3 表示调用栈深度)
1 | watch com.yjt.ccb.controller.ExchangeController invoke '{params,returnObj,throwExp}' -n 2 -x 3 |
查看方法栈运行时间(–skipJDKMethod false 表示包含 JDK 的调用栈)
1
trace com.yjt.ccb.controller.ExchangeController invoke -n 2 --skipJDKMethod false
统计方法运行平均用时(–cycle 10 表示10秒一次)
1
monitor com.yjt.ccb.controller.ExchangeController invoke -n 10 --cycle 10
查看 JVM 内存信息
1
memory

最佳实践
- 使用插件自动生成指令
为了使 Arthas 更易用,我们可以使用 IDEA 的插件 - arthas idea - IntelliJ IDEs Plugin | Marketplace
安装后,我们在需要使用 Arthas 命令的方法上右键就能看到 Arthas 菜单,可以根据需要自动生成上述各种 Arthas 的指令。
在 Springboot 中集成 Arthas
在 Spring 应用中集成 Arthas,应用启动时,Arthas 也会跟着启动,同时也启动了 Arthas Console, 其实就是网页版。配置 maven 依赖
1
2
3
4
5<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>${arthas.version}</version>
</dependency>- 配置 springboot
1
2
3
4
5
6spring.arthas.enabled=true
arthas.ip=0.0.0.0
arthas.telnet-port=13658
arthas.http-port=18563
arthas.username=arthas
arthas.password=arthas- 网页控制台使用