arthas官方文档:命令列表 | arthas (aliyun.com)
一、下载arthas-boot.jar(windows)
浏览器输入https://arthas.aliyun.com/arthas-boot.jar
二、启动
cmd窗口使用管理员身份启动
java -jar arthas-boot.jar
三、服务器运行程序进行监控
这时候,arthas会列出当前检测到的java进程,需要你手动选择某个进程,这里选择1,并按回车键即可;
图中127.0.0.1:3658是Arthas自带浏览器调试地址 可在浏览器中调试Arthas进行监控
四、Arthas 使用详解
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到 JVM 的实时运行状态?
- 怎样直接从 JVM 内查找某个类的实例?
总的来说,Arthas 的出现可以大大提升程序员对线上问题的排查、定位,从而达到快速解决问题的目的,更加详细的介绍可以参考:https://arthas.aliyun.com/
1、dashboard
1)输入dashboard(仪表板),按 回车/enter ,会展示当前进程的信息,按 ctrl+c 可以中断执行;
2) dashboard命令可以查看cpu、线程状态,内存信息、GC情况和jdk版本等信息;
关于上面dashboard展示信息说明
- 第一部分显示JVM中运行的所有线程:所在线程组,优先级,线程的状态,CPU的占用率,是否是后台进程等;
- 第二部分显示的JVM内存的使用情况;
- 第三部分是操作系统的一些信息和Java版本号;
由于监控页面会实时刷新,默认每5000毫秒(5秒)刷新一次。可以通过 - i 参数指定刷新频率,-n 参数指定刷新次数。这个统计会有一定的开销,从截图中也可以看到arthas的cpu占比比较大,所以刷新频率不要太高,建议5秒以上,刷新次数建议10次以内;
每10秒刷新一次,3次后停止
dashboard -i 10000 -n 3
2、thread
使用thread命令可以查看线程的状态,显示的结果其实就是dashboard结果的第一栏
image.png
我们在线上排查问题的时候,往往需要查看进程中某个或者几个最占资源的线程,就可以使用thread命令进行着手分析,比如,上图中,我们需要分析arthas-demo 中的main线程,可以使用 thread + 线程编号 进行输出;
thread命令可以追加的参数
- id:可以查看指定线程id的堆栈信息;
- -n value:找出最忙的value个线程,并打印堆栈信息;
- -b:找出当前正在阻塞其他线程的线程;
-
-i value:指定采样cpu占比的时间间隔,默认为100ms;
打印当前最忙的3个线程的堆栈信息
打印正在阻塞其他线程的线程
3、jad
通过jad来反编译Main Class,生产环境下,当大致定位到问题时,想要进一步知道到底是哪一块的代码引起的问题时,不需要通过反编译工具下载jar包,直接通过jad命令,也可以将问题的代码反编译出来,如上面的demo的main class代码
4、jvm
用于查看当前 JVM 的信息
在jvm展示的信息列表中,通常比较关注 thread相关的信息
thread展示的核心参数说明:
- COUNT: JVM当前活跃的线程数;
- DAEMON-COUNT: JVM当前活跃的守护线程数 ;
- PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数;
- STARTED-COUNT: 从JVM启动开始总共启动过的线程次数;
- DEADLOCK-COUNT: JVM当前死锁的线程数;
5、stop
Arthas在30分钟无操作时会自动关闭。
- history 查看历史,执行过的命令
- quit 退出当前
- stop是直接关闭Arthas客户端
- cls 清屏
- pwd 显示当前所在路径
网友评论