Arthas是一个Java诊断工具,它允许开发者对运行中的Java应用进行监控和故障排查,而无需重启。它可以被用来监视JVM当前状态和执行的Java代码。

环境准备

  • 确保JDK版本为8及以上。
  • 确保所在环境能够访问外部下载地址或者已经下载好了Arthas工具。

安装Arthas

  1. 下载Arthas

    前往Arthas的GitHub页面(https://github.com/alibaba/arthas)下载最新版本的Arthas,或者通过以下命令行直接下载:

    curl -L https://arthas.aliyun.com/download/latest_version?mirror=aliyun -o arthas-boot.jar
  2. 启动Arthas

    使用Java命令启动Arthas:

    java -jar arthas-boot.jar

    运行后,会显示当前系统中的Java进程列表,会显示你启动的java应用,比如我这里部署了2个spring boot应用

    分表是api-service.jar wechat-official-accounts-1.0-SNAPSHOT.jar:

[root@VM-8-6-centos arthas]# java -jar arthas-boot.jar 
[INFO] JAVA_HOME: /usr/local/jdk1.8.0_261/jre
[INFO] arthas-boot version: 3.7.1
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 25331 /usr/local/java/jar/api-service/api-service.jar
  [2]: 15862 wechat-official-accounts-1.0-SNAPSHOT.jar

控制台输入1,代表进入第一个应用,输入2代表进入第二个应用

基本命令和使用示例

  1. dashboard

    显示系统和JVM的实时数据面板。

    dashboard
  2. thread

    查看当前JVM的线程信息。

    thread

    查看特定线程堆栈:

    thread [线程ID]
  3. jvm

    显示JVM的详细信息。

    jvm
  4. sysprop

    显示系统属性。

    sysprop

    查看特定的系统属性:

    sysprop [属性名]
  5. sysenv

    显示系统环境变量。

    sysenv
  6. vmoption

    查看或设置JVM的启动参数。

    查看所有JVM启动参数:

    vmoption

    设置或更改JVM参数:

    vmoption -Xms1g
  7. watch

    监控方法执行情况。

    watch [类名] [方法名] "{params, target, returnObj}" -x 2

    示例watch com.example.service.UserService createUser "{params, target, returnObj}" -x 2

  8. trace

    追踪方法调用路径。

    trace [类名] [方法名]

查找消耗性能的方法

  1. profiler

    使用 profiler 命令来进行CPU和内存分析。

    profiler start

    运行一段时间后,使用以下命令查看结果:

    profiler stop

    这将生成一个html分析报告,展示消耗最多CPU或内存的方法。

  2. monitor

    监控方法的调用次数和执行时间。

    monitor -c 5 [类名] [方法名]

    这个命令会监控指定方法5秒钟,显示调用次数和总耗时,帮助定位性能瓶颈。

  3. watch

    使用 watch 命令来监控方法的具体执行情况。

    watch [类名] [方法名] "{'cost':(timestampMills-startTimeStampMills)}" -x 2

    这个命令会监控指定方法的执行时间,有助于找出耗时长的方法。

总结

Arthas是一个功能强大的Java诊断工具,通过以上命令和示例,您可以有效地监控和诊断Java应用程序的性能问题。在使用这些高级功能时,请确保对Java和JVM有一定的了解,以便正确解读结果。

Last modification:December 18, 2023
如果觉得这篇技术文章对你有用,请随意赞赏