一、JDK自带的工具
jps | JVM Process Status Tool | 虚拟机进程状况工具 | jps命令用于列出正在运行的虚拟机进程信息 |
jstat | JVM Statistics Monitoring Tool | 虚拟机统计信息监视工具 | jstat命令用于监视虚拟机各种运行状态信息 |
jinfo | Configuration Info for Java | Java配置信息工具 | jinfo命令用于实时查看和调整虚拟机各项参数 |
jmap | Memory Map for Java | Java内存映象工具 | jmap命令用于生成堆转储快照 |
jhat | JVM Heap Analysis Tool | 虚拟机堆转储快照分析工具 | jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照 |
jstack | Stack Trace for Java | Java堆栈跟踪工具 | jstack命令用于生产虚拟机当前时刻的线程快照 |
VisualVM | 多合一故障处理工具 |
二、VisualVM介绍
VisualVM作为Java VisualVM在Oracle JDK 6~8中发布,在Java\jdk1.8.0_144\bin目录下jvisualvm.exe。但在jdk9之后,VisualVM是作为一个独立的工具发布的,可以在任何兼容的JDK上运行。
![](https://img-blog.csdnimg.cn/c682fa756acb40d9aa57f8ae6365d025.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbWlzc-S9oOS6huWVpg==,size_16,color_FFFFFF,t_70,g_se,x_16)
VisualVM使用各种技术(包括jvmstat、JMX、可服务性代理(Serviceability Agent, SA)和Attach API)监视和排除运行在Java 1.4+上的应用程序的故障。
显示本地和远程Java进程 | VisualVM自动检测并列出本地和远程运行的Java应用程序(jstatd必须在远程主机上运行)。您还可以通过JMX连接手动定义应用程序。 |
显示进程配置和环境 | 对于每个进程,VisualVM显示基本的运行时信息:PID、主类、传递给java进程的参数、JVM版本、JDK主进程、JVM标志和参数以及系统属性。 |
监控进程性能和内存 | VisualVM监视应用程序的CPU使用情况、GC活动、堆和元空间/永久生成内存、加载的类的数量和运行的线程。 |
可视化进程中的所有线程信息 | Java进程中运行的所有线程都显示在一个时间轴中,同时显示聚合的运行、休眠、等待、驻留和监视时间。 |
分析性能和内存使用情况 | VisualVM提供了分析应用程序性能和内存管理的基本分析功能。可以使用取样和仪器分析器。 |
获取和显示线程转储 | VisualVM获取并显示线程转储,以便立即了解目标进程中正在发生的事情。多个进程的同步线程转储有助于发现分布式死锁。 |
获取并浏览堆转储 | VisualVM根据需要或OutOfMemoryError创建并查看.hprof内存快照,以帮助发现低效的堆使用和调试内存泄漏。 |
分析核心转储 | VisualVM能够从核心转储中读取关于崩溃的Java进程及其环境的基本信息,并提取并打开所包含的线程和堆转储。 |
分析应用程序离线 | VisualVM能够将应用程序配置和运行时环境以及所有获取的线程转储、堆转储和分析器快照保存到一个单独的应用程序快照中,该快照稍后可以脱机处理。 |
三、VisualVM插件安装
联机下载太慢,推荐安装方式:下载npm包手工导入
插件下载地址:https://visualvm.github.io/uc/8u131/updates.html
四、常用插件使用介绍
1、Visual GC
将Visual GC工具集成到VisualVM。为每个本地或远程应用程序显示可视化GC用户界面,并通过jvmstat API提供性能计数器。Visual GC工具附加到一个HotSpot JVM上,以图形方式收集并显示垃圾收集、类装入器和HotSpot编译器性能数据。
2、线程
Threads Inspector在Threads选项卡中添加了一个新部分,显示所选活动线程的堆栈跟踪。
3、Tracer
跟踪器探测监视Java Collections框架;跟踪器探测监视Java I/O调用等。
五、VisualVM插件安装
1、本地连接:自动显示本地已经启动的JVM进程
2、远程连接:jstatd连接。jstatd 是JDK自带的工具
在远程主机上,新建一个 jstatd.policy 文件,内容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然后在远程主机上启动 jstatd 并且不要关闭。
jstatd -J-Djava.security.policy=jstatd.policy -p 1099
VisualVM上远程添加jstatd连接,输入IP 端口即可