arthas

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

官方API:https://arthas.aliyun.com/doc/

下载

    wget https://alibaba.github.io/arthas/arthas-boot.jar

启动

普通启动

java -jar arthas-boot.jar

启动时指定对外开放ip,允许远程连接,客户端可以通过该ip连接服务器上的arthas,默认端口为3658

    java -jar arthas-boot.jar --target-ip 192.168.132.132

上述命令其实是启动了arthas服务端,同时启动了一个客户端连接到该服务端
在这里插入图片描述
显示了所有java进程,我这里只有一个,所以就是1个,提示你输入对应的数字,进入,我输入1,然后回车,或者在命令最后加上pid,直接进入指定服务
arthas_第1张图片

常用命令

来源:https://blog.csdn.net/qq_40606397/article/details/121989947

dashboard命令

该命令是我们最常使用的命令,它能够展示我们当前这个java服务对应的所有线程的运行状态、CPU占用率、线程ID等情况;展示java服务内存占用情况,包括所有GC各个分代的总量、使用量、占用率、GC次数;以及java服务对应的版本和位置。能够直接快速定位到问题点。如图

arthas_第2张图片

thread命令

thread命令可以展示所有线程对应的运行情况。但是它最牛逼的地方在于,当我们遇到某个线程出现例如高CPU占用时,我们只要运行thread 线程ID 就可以立刻定位到是哪一行源代码在占用如此高的cpu,能够快速立刻的解决我们原本需要排查很久的问题。例如:

arthas_第3张图片

trace命令

trace命令可以说是arthas一个极其强大且实用的命令,他会把我们想要监听的方法进行长期监听,直到方法满足我们设置的调用次数,然后会返回监听的方法下的每一个子方法的代码耗时时间!这是一个非常实用的检测我们接口里面具体哪个方法占用最大的耗时操作,从而解决性能瓶颈!他的使用命令为:trace 类全限定名 方法名 -n 执行次数,例如:

arthas_第4张图片
不加-n参数,就是一直监控

jad命令

jad命令可以为我们反编译出class文件,将他编译成我们正常的java代码,jad命令后面跟对应要编辑的类的全类名。例如:jad com.sys.javaConfig.CorsConfig 他就会自动帮我们把线上的CorsConfig文件打印出来。
arthas_第5张图片

tt命令

tt命令用于监控某个方法,能记录下当时方法调用的所有入参和返回值以及方法总体的执行情况。

其中,最常用的查看方法总体执行情况的命令是:tt -t 全类名 方法名。它能够帮你监听某个方法,当该方法被调用时,会输出当前调用请求的方法执行情况,如下图:

在这里插入图片描述
需要查看调用方法的参数和返回值时,使用这个命令:tt -i index的值 。 此时,就会打印出具体请求对应的访问这个方法的所有情况,如下图:
arthas_第6张图片

sc、sm命令

这个命令主要查看JVM已加载的类信息、方法信息,它可以查看到这个类的各中位置信息,继承情况,加载情况等,常用的命令为:sc -d 类全限定名,例如:sc -d com.wzw.test.TestController
arthas_第7张图片
还能查询该类的成员变量方法信息,使用sc -d -f 类全限定名
sm命令和sc命令很相似,他是获取当前类下面的所有方法,及其入参返参等数据,使用sm -d 类全限定名 即可

jvm命令

这个命令主要用来查看当前jvm信息。只需命令行执行:jvm,他最主要的作用还是在最底下,能够查看该jvm运行期间线程的存活数量、而且能够看到当前是否存在死锁等,其中包括如下内容:
arthas_第8张图片

headdump命令

这个命令的作用是导出当前jvm的 dump文件。命令很简单,只需执行:heapdump 导出的文件路径 即可,例如:heapdump /tmp/dump.hprof

问题

Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs

解决方案有两种,
第一种,将openjdk改为oracle jdk,这个就不展开讲了。
第二种,便是直接lsof -i|grep 端口号找到你想要排查的java服务pid,然后直接在命令后跟上pid即可运行,例如pid为123,命令运行:java -jar xxx.jar 123

你可能感兴趣的:(java)