Arthas 与 JVM 性能排查

Arthas 简介

Arthas 是阿里巴巴开源的一款 Java 诊断工具,能够动态监控和分析运行中的 Java 应用程序。它提供了丰富的命令行交互功能,支持实时查看 JVM 状态、方法调用追踪、热修复代码等操作,无需重启应用。

JVM 性能排查的核心场景
  1. CPU 使用率过高:排查线程阻塞或死循环问题。
  2. 内存泄漏:分析对象占用和 GC 行为。
  3. 方法执行缓慢:定位耗时方法调用链。
  4. 类加载问题:检测重复加载或冲突。
使用 Arthas 排查 CPU 问题

通过 thread 命令查看线程状态和 CPU 占用:

thread -n 3  # 显示CPU占用最高的3个线程

结合 tt 命令记录方法调用:

tt -t com.example.Service process  # 监控特定方法
内存泄漏分析

使用 dashboard 观察堆内存趋势:

dashboard  # 实时显示内存/线程/GC数据

通过 heapdump 导出堆快照:

heapdump /tmp/heap.hprof  # 生成堆转储文件
方法级性能诊断

利用 trace 追踪调用链路耗时:

trace com.example.Controller * '#cost > 100'  # 过滤耗时>100ms的调用

使用 profiler 进行火焰图采样:

profiler start  # 启动性能采样
profiler stop --format flamegraph  # 生成火焰图
高级技巧
  1. 热修复代码:通过 redefine 直接替换类文件:
redefine /tmp/FixClass.class
  1. 动态监控watch 命令观察方法入参/返回值:
watch com.example.Dao getById '{params,returnObj}' -x 2
与传统工具对比

| 工具 | 实时性 | 侵入性 | 功能范围 | |-------------|--------|--------|-------------------| | Arthas | 高 | 低 | 全面诊断 | | JProfiler | 中 | 高 | 可视化分析 | | JStack | 低 | 中 | 线程快照 |

最佳实践
  • 生产环境慎用 redefine 操作
  • 采样时间不宜过长避免性能影响
  • 结合 Grafana 等监控系统进行趋势分析

通过合理运用 Arthas 的各项功能,能够快速定位大多数 JVM 性能问题,显著提升排查效率。其无侵入式的特性尤其适合线上环境紧急诊断。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐