jvm调优神器——arthas

arthas(阿尔萨斯)是阿里巴巴开源的java诊断工具。

一、安装

arthas在github上有个page,地址是https://alibaba.github.io/arthas/

安装的方式有好几种:

  1. 直接下载一个可以启动的jar包然后用java -jar的方式启动
  2. 用官方提供的as.sh脚本一键安装
  3. 用rpm的方式安装

这里介绍第一种方式,因为它简单而且想迁移的时候也超级方便(毕竟只需要把下载的jar包拷贝走就行了)。

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

如果下载速度太慢,可以用gitee上的源

curl -O https://arthas.gitee.io/arthas-boot.jar

二、启动

用java命令直接启动

java -jar arthas-boot.jar

下面就列出了本机正在运行的java进程,等待用户输入,这里输入5然后回车。如果是第一次启动需要下载一些必要的文件,等待下载完成

如果看到这个界面就表示启动并关联成功了

 

 

 

三、help命令

在arthas交互环境中,可以输入help命令,然后会出现所有arthas支持的命令

 

 

 

四、arthas命令

1.thread   查看当前线程信息,查看线程的堆栈

 

 

 thread加线程id可输出该线程的栈信息

 

 

 2. 死锁

还是thread命令  参数是-b

举个栗子:https://blog.csdn.net/qq_36881887/article/details/1

3.  dashboard  内存泄漏 

如果内容使用率在不断上升,而且gc后也不下降,后面还发现gc越来越频繁,很可能就是内存泄漏了。

这个时候我们可以直接用heapdump命令把内存快照dump出来,作用和jmap工具一样

[arthas@4328]$ heapdump --live /root/jvm.hprof
Dumping heap to /root/jvm.hprof ...
Heap dump file created

五、arthas其它命令

1.watch   方法执行数据观测

让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值抛出异常入参,通过编写 OGNL 表达式进行对应变量的查看。

举个栗子:这几天getAlibabaSTS执行时间过长,导致服务器压力较大,我们使用这个命令来查看一下这个方法

命令:watch com.haohuo.compose.BsFramCompose getAlibabaSTS -x

 

 

 使用swagger模拟访问一次,在观察控制台输出情况

 

 

 上图可知,入参object为空

返回comresul等信息都已打印,与模拟返回一致

 

 

 

2.trace    方法内部调用路径,并输出方法路径上的每个节点上耗时

trace 命令能主动搜索 class-patternmethod-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路

还是以getAlibabaSTS方法为例

命令:trace com.haohuo.compose.BsFramCompose getAlibabaSTS -n 1

 

 

 

 

3.stack  输出当前方法被调用的调用路径

很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

我们还是以之前的方法为例

命令:stack com.haohuo.compose.BsFramCompose getAlibabaSTS -n 1

 

 

4.monitor   对匹配 class-patternmethod-patterncondition-express的类、方法的调用进行监控。monitor 命令是一个非实时返回命令.

实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。

命令:monitor -c 5 com.haohuo.compose.BsFramCompose getAlibabaSTS

下面2张图分别为没点用之前和连续点击一定次数后的截图

 

 

 

 

total是接口总调用次数,success为调用成功次数 ,fail为调用失败次数  avg-rt 为调用平均耗时

5. arthas还提供了很多用于监控的命令,比如监控某个方法的执行时间,反编译线上的class文件,甚至在不重启java应用的情况下直接替换某个类。官方的使用文档已经写得太详细了,这里就不再一一介绍了,大家可以自己尝试。

官方文档:http://arthas.gitee.io/

五、arthas插件(idea)

目前Arthas 官方的工具还不够足够的简单,需要记住一些命令,特别是一些扩展性特别强的高级语法,比如ognl获取spring context 为所欲为,watch、trace 不够简单,需要构造一些命令工具的信息,因此只需要一个能够简单处理字符串信息的插件即可使用。当在处理线上问题的时候需要最快速、最便捷的命令,因此Idea arthas 插件还是有存在的意义和价值的。

有兴趣的小伙伴可以自行了解!https://blog.csdn.net/u012881904/article/details/103865802

posted @ 2021-03-24 18:48  忧伤恋上了快乐  阅读(35)  评论(0)    收藏  举报