1,jvisualvm
2,jconsole
** JConsole工具是JDK自带的可视化监控工具。查看java应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等 **
命令行中输入:jconsole
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin
./jconsole &
3,Arthas
** Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题 **
** 使用文档:alibaba.github.io/arthas/ **
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
- 3.1 下载安装
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
# 然后可以选择一个Java进程
这个问题是当前Java环境变量配置的是JDK10,所以arthas运行环境是Java10,但是项目里用的是JDK8,所以把环境变量中Java变量改一下 vi ~/.bash_profile 改一下,重新用jdk8来启动arthas. 启动成功界面如下:
下面就可以用 help命令 来查看信息了:
查看可以使用哪些命令:
version:查看arthas版本号
help:查看命名帮助信息
cls:清空屏幕
session:查看当前会话信息
quit:退出arthas客户端
---
dashboard:当前进程的实时数据面板
thread:当前JVM的线程堆栈信息
jvm:查看当前JVM的信息
sysprop:查看JVM的系统属性
---
sc:查看JVM已经加载的类信息
dump:dump已经加载类的byte code到特定目录 jad:反编译指定已加载类的源码
---
monitor:方法执行监控
watch:方法执行数据观测
trace:方法内部调用路径,并输出方法路径上的每个节点上耗时
stack:输出当前方法被调用的调用路径
......
比如 jvm命令:
4,MAT
详情见 Java堆分析器(MAT)