Java 性能分析和线上监控-Arthas

什么是Arthas

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

总结来说就是可以查看、修改运行中的 Java 应用。

什么时候需要 Arthas

  1. 了解当前 Java 应用的性能

  2. 查看当前 Java 应用的瓶颈

  3. 监控 JVM 的运行状态

  4. 线上修改日志

  5. 测试环境直接修改代码

  6. 定位应用热点,生成火焰图

Arthas 常用命令小结

  1. help - 查看支持哪些指令

  2. memory - 查看 JVM 内存信息

  3. thread - 查看线程 CPU 使用率

  4. cls - 清空当前屏幕

  5. logger - 查看并修改日志信息

  6. stack - 查看方法的调用栈

  7. watch - 查看方法的调用情况包括参数和返回值

  8. tract - 查看方法的调用栈运行时间

  9. monitor - 统计一段时间内的方法的调用次数、平均运行时间、成功/失败次数

  10. tt - watch的升级版,支持先把方法调用全记录下来,后续再排查

  11. profiler - 生成火焰图

  12. sc/sm/jad/mc/redefine - 线上查找并修改class

Arthas 常用命令示例

  1. 查看方法的调用栈(-n 2 表示查看两次)

    1
    stack com.yjt.ccb.controller.ExchangeController invoke -n 2
  2. 查看方法的参数和返回值(-x 3 表示调用栈深度)

1
watch com.yjt.ccb.controller.ExchangeController invoke '{params,returnObj,throwExp}'  -n 2  -x 3
  1. 查看方法栈运行时间(–skipJDKMethod false 表示包含 JDK 的调用栈)

    1
    trace com.yjt.ccb.controller.ExchangeController invoke  -n 2 --skipJDKMethod false
  2. 统计方法运行平均用时(–cycle 10 表示10秒一次)

    1
    monitor com.yjt.ccb.controller.ExchangeController invoke  -n 10  --cycle 10
  3. 查看 JVM 内存信息

    1
    memory

最佳实践

  1. 使用插件自动生成指令

为了使 Arthas 更易用,我们可以使用 IDEA 的插件 - arthas idea - IntelliJ IDEs Plugin | Marketplace

安装后,我们在需要使用 Arthas 命令的方法上右键就能看到 Arthas 菜单,可以根据需要自动生成上述各种 Arthas 的指令。

  1. 在 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
      6
      spring.arthas.enabled=true
      arthas.ip=0.0.0.0
      arthas.telnet-port=13658
      arthas.http-port=18563
      arthas.username=arthas
      arthas.password=arthas
      • 网页控制台使用

      打开网页 http://localhost:18563