使用 Arthas 排查性能问题
分析 JVM 运行状况:
- 使用 dashboard 命令实时监控 JVM 的线程、内存、GC、类加载等信息,初步了解系统的运行状况,识别潜在的问题区域。
线程分析:
- 使用 thread 命令查看线程的状态和堆栈信息,识别 CPU 使用率高的线程或死锁情况。通过 thread -n 查看 CPU 使用最高的线程,通过 thread -b 查看阻塞线程。
内存分析:
- 使用 heapdump 命令生成堆内存快照,使用内存分析工具(如 MAT)分析内存使用情况,找出内存泄漏或内存占用过高的问题。
方法级别的性能分析:
- 使用 trace 命令对指定方法进行追踪,分析方法调用路径和执行时间,找出执行缓慢的方法。可以通过 trace className methodName 命令指定类和方法。
- 使用 monitor 命令实时监控方法的调用次数、平均耗时等指标,快速识别高频调用且执行时间长的方法。
性能瓶颈定位:
- 使用 profiler 命令对应用进行性能分析,生成方法调用的火焰图,直观地展示方法调用的性能分布,帮助定位性能瓶颈。
动态调试和观察:
- 使用 watch 命令观察方法的输入参数、返回值及异常信息,帮助调试方法逻辑。可以通过 watch className methodName returnObj 命令观察方法的返回值。
- 使用 stack 命令打印方法调用堆栈,帮助分析调用链路和性能瓶颈。
示例:使用 Arthas 排查性能问题
# 启动 Arthas
java -jar arthas-boot.jar
# 连接到目标 Java 应用
as.sh
# 查看实时 JVM 运行状况
dashboard
# 查看 CPU 使用率最高的线程
thread -n 3
# 查看阻塞线程
thread -b
# 生成堆内存快照
heapdump
# 追踪指定方法的调用路径和执行时间
trace com.example.MyService myMethod
# 监控指定方法的调用次数和平均耗时
monitor com.example.MyService myMethod
# 使用火焰图进行性能分析
profiler start
profiler stop
profiler get