0
点赞
收藏
分享

微信扫一扫

JVM 应用诊断利器


​​官网地址​​

简介:

介绍:

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

Arthas(阿尔萨斯)能为你做什么?

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

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

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

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

安装:

Linux:

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

如果下载速度比较慢,可以使用 aliyun 的镜像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http

完全退出arthas可以执行`stop`

arthas常用命令:

​​详细命令及介绍可参考​​

命令

详细说明

jvm

查看当前JVM信息

thread

查看当前JVM的线程堆栈信息,这个命令和 jstack 很相似,但是功能更加强大,主要是查看当前 JVM 的线程堆栈信息

watch

方法执行数据观测

dashboard

当前系统的实时数据面板

trace

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

stack

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

tt

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

vmoption

查看,更新JVM已加载的类信息

sc

查看JVM已加载的类信息

sm

查看已加载类的方法信息

jad

反编译指定已加载类的源码

heapdump

类似jmap命令的heap dump 功能

classloader

查看classloader的继承树,urls,类加载信息

jvm 命令:

JVM 应用诊断利器_linux

OPERATING-SYSTEM:系统相关参数

THREAD相关:

  • COUNT : JVM当前活跃的线程数
  • DAEMON-COUNT : JVM当前活跃的守护线程数
  • PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数
  • STARTED-COUNT: 从JVM启动开始总共启动过的线程次数
  • DEADLOCK-COUNT: JVM当前死锁的线程数

FILE-DESCRIPTOR(文件描述符相关):

  • MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数
  • OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数

thread 命令:

参数说明:

命令

详细说明

id

线程id

[n:]

指定最忙的前N个线程并打印堆栈

[b]

找出当前阻塞其他线程的线程

[i]

指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200

[–all]

显示所有匹配的线程

打印当前最忙的N个线程并打印堆栈

thread -n 3

JVM 应用诊断利器_java_02

thread -i 1000 -n 3 每过 1000 毫秒进行采样,显示最占 CPU 时间的前 3 个线程

thread –b 找出阻塞当前线程的线程

thread 显示所有线程

thread 43: 显示指定线程ID的运行堆栈

thread --state WAITING 查看处于等待状态的线程

dashboard 命令:

运行程序时,会显示当前程序的实时信息,如qps, rt, 错误数, 线程池信息等等

dashboard -i 1000 每过1000毫秒进行更新,默认是5000毫秒

JVM 应用诊断利器_linux_03

heapdump 命令:

heapdump /usr/local/tomcat/tomcat.hprof 指定dump文件路径,备份所有

heapdump --live /usr/local/tomcat/tomcat.hprof 备份live类的dump

memory 命令:

JVM 应用诊断利器_加载_04


举报

相关推荐

0 条评论