Arthas小白入门

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arthas小白入门相关的知识,希望对你有一定的参考价值。

 背景

项目跑起来了,是否是按照预想的方式在跑,内存和CPU的占用情况,线程数等这些东西,该怎么监控查看。

这个时候一般的人会找运维,现在有开源的了 - arthas。

Arthas数据展示

 


Arthas说明


Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

    这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
    我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
    遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
    线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    是否有一个全局视角来查看系统的运行状况?
    有什么办法可以监控到JVM的实时运行状态?
    怎么快速定位应用的热点,生成火焰图?
    怎样直接从JVM内查找某个类的实例?

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

项目地址:https://gitee.com/arthas/arthas

1、下载程序包并运行

wget https://arthas.aliyun.com/arthas-boot.jar

启动命令:

java -jar arthas-boot.jar

arthas-boot是Arthas的启动程序,它启动后,会列出所有的Java进程,用户可以选择需要诊断的目标进程。

选择第一个进程,输入 1 ,再Enter/回车:

如果要选中第二个进程,输入2,再Enter/回车:

... ...

以此类推(一次只监控一个程序,不要贪心

Attach成功之后,会打印Arthas LOGO。输入 help 可以获取到更多的帮助信息。


2、看板 Dashboard

dashboard 命令可以查看当前系统的实时数据面板。

输入 Q 或者 Ctrl+C 可以退出dashboard命令。

3、Thread

thread 1 命令会打印线程ID 1的栈。

Arthas支持管道,可以用 thread 1 | grep 'main(' 查找到main class。

可以看到main class是demo.MathGame:

$ thread 1 | grep 'main('
    at demo.MathGame.main(MathGame.java:17)

4、Sc

可以通过 sc 命令来查找JVM里已加载的类:

sc -d *MathGame

5、Jad

可以通过 jad 命令来反编译代码:

jad demo.MathGame


6、Watch

通过watch命令可以查看函数的参数/返回值/异常信息。

watch demo.MathGame primeFactors returnObj

输入 Q 或者 Ctrl+C 退出watch命令。


7、Vmtool

通过vmtool命令,可以搜索内存对象。

vmtool --action getInstances --className java.lang.String --limit 10

bash
$ vmtool --action getInstances --className java.lang.String --limit 10
@String[][
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com.taobao.arthas.core.shell.session.Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/],
    @String[java/util/concurrent/ConcurrentHashMap$ValueIterator],
    @String[java/util/concurrent/locks/LockSupport],
]

8、Exit/Stop


退出Arthas

用 exit 或者 quit 命令可以退出Arthas。

退出Arthas之后,还可以再次用 java -jar arthas-boot.jar 来连接。
彻底退出Arthas

exit/quit命令只是退出当前session,arthas server还在目标进程中运行。

想完全退出Arthas,可以执行 stop 命令。


基本上掌握上面的这些常用命令,就可以秒杀一大帮的开发了。升职加薪指日可待!

上面大部分的内容来自官方文档,有兴趣的可以自己看下。

参考:Arthas 用户文档 — Arthas 3.6.2 文档

以上是关于Arthas小白入门的主要内容,如果未能解决你的问题,请参考以下文章

arthas 入门最佳实践

arthas 入门最佳实践

阿里开源项目arthas安装使用

JVM实战系列「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南

Java程序员线上排查问题神器-Arthas

Arthas