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小白入门的主要内容,如果未能解决你的问题,请参考以下文章