JVM之arthas在线排查工具

  • 启动arthas
  • 总结几个常用的命令
  • 1.jvm命令:
  • 2.thread命令:
  • 3. dashboard命令:
  • 4.heapdump 命令
  • 5.jad命令:
  • 6.redefine命令:
  • 7.SC命令:


启动arthas

arthas的github地址:https://github.com/alibaba/arthas arthas官方文档:https://alibaba.github.io/arthas/index.html

点开github上arthas的中文文档

arthas进入对应的java进程 arthas jmap_github


按照文档的步骤一步一步下载就好了,下载之后方法到linux上,并且解压得到

arthas进入对应的java进程 arthas jmap_github_02


启动一个java文件,这个java文件自己随便写一个模拟死循环就行了

arthas进入对应的java进程 arthas jmap_JVM_03


回到arthas目录,输入java -jar arthas-boot.jar 启动arthas

arthas进入对应的java进程 arthas jmap_arthas进入对应的java进程_04

总结几个常用的命令

1.jvm命令:

arthas进入对应的java进程 arthas jmap_JVM_05

JVM命令可以查看当前JVM的一些基本参数,包括JDK版本,内存状况,启动参数等。。。

2.thread命令:

arthas进入对应的java进程 arthas jmap_jar_06

类似于jstack,可以查看线程的状况,包括线程id,线程名称,线程状态,cpu使用情况。使用 thread + threadId可以查看执行线程的详情

arthas进入对应的java进程 arthas jmap_arthas进入对应的java进程_07

3. dashboard命令:

arthas进入对应的java进程 arthas jmap_JVM_08

总体查看系统的一些信息,包括线程,内存,以及OS的信息。

4.heapdump 命令

arthas进入对应的java进程 arthas jmap_JVM_09

导出heap文件,需要注意的是导出的文件,后缀名必须是.hprof。

我们有jhat命令来分析这个文件:

arthas进入对应的java进程 arthas jmap_github_10

访问7000端口

arthas进入对应的java进程 arthas jmap_github_11

拉取到网页的最下端

arthas进入对应的java进程 arthas jmap_JVM_12


arthas进入对应的java进程 arthas jmap_github_13


这里跟在线分析jmap差不多。

需要注意的是,如果项目上线了,最好不要在线程导出dump文件,由于堆太大的一些原因,可能会导致整个系统长时间的瘫痪无法运行。除了jhat命令,我们还可以把hprof文件下载到本地,利用JDK自带的jvisualvm图形界面来分析hprof文件

arthas进入对应的java进程 arthas jmap_jar_14


定位问题

arthas进入对应的java进程 arthas jmap_arthas进入对应的java进程_15

5.jad命令:

arthas进入对应的java进程 arthas jmap_github_16

可以把指定的类进行反编译。 动态代理生成类的问题定位 第三方的类(观察代码) 版本问题(确定自己最新提交的版本是不是被使用)

6.redefine命令:

用于在已经上线,不方便停止运行的情况下,修改小型bug,热替换。
热替换 目前有些限制条件:只能改方法实现(方法已经运行完成),不能改方法名, 不能改属性 m() -> mm()

7.SC命令:

“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息

更详细的介绍,还是需要看官方的文档,这里只是简单的应用。