JVM监控性能调优GUI篇(二)- Visual VM
概述
VisualVM 是一个集成了命令行 JDK 工具和轻量级分析功能的可视化工具。 专为开发和生产时间使用而设计。是目前JDK自带工具里,比较综合实用的一个可视化工具,代替常用命令行工具,可以查看虚拟机进程及进程 的配置和环境信息(jps
, jinfo
),监视程序的CPU, GC, 堆, 方法区及线程的信息(jstat
、 jstack
)等, 甚至代替jConsole。
官网地址: https://visualvm.github.io/
安装
-
IDEA插件
-
首先在IDEA中搜索
VisualVM Launcher
插件并安装 -
重启IDEA,然后配置该插件,不然启动不了
-
点击启动按钮,再选择具体的java进程即可
-
-
JDK自带
在自己安装的 JAVA_HOME/bin 目录下,找
jvisualvm
(在java这边多了一个j的前缀)即可
连接方式
-
本地连接
打开后能看到本地所有java进程的进程名和进程ID(类似 jps), 点击具体进程就可看到详情。
-
远程连接
- 确定远程服务器的ip地址
- 添加JMX(通过JMX技术具体监控远程服务器哪个Java进程)
- 修改bin/catalina.sh文件,连接远程的tomcat
- 在…/conf中添加jmxremote.access和jmxremote.password文件
- 将服务器地址改成公网ip地址
- 设置网络安全策略和防火墙策略
- 启动tomcat,查看tomcat启动日志和端口监听
- JMX中输入端口号、用户名、密码登录
主要功能
-
生成/读取堆内存快照
-
生成堆dump快照
方式1:点击
监视
->堆dump
注意:这些快照存储在内存中,当线程停止的时候快照就会丢失,如果还想利用,可以将快照进行另存为
方式二:也可以在具体的pid上右键,dump
-
读取堆dump快照
点击
文件
,选择装入
,文件格式选择.hprof
, 装载即可。
-
-
查看JVM参数和系统属性
-
JVM参数
点击
概述
, 查看JVM参数
信息,可以查看当前java 进程设置的JVM参数 -
系统属性
点击
概述
, 查看系统属性
信息,可以查看系统相关属性和默认属性
-
-
查看运行中的虚拟机进程
-
点击
监视
查看,右上角勾选进程
,可事实查看虚拟机进程相关信息(活动、守护进程、峰值、已启动总数)
-
-
生成/读取线程快照
-
生成线程快照
方式一:点击
线程
, 再点击右上角的线程dump
,另外,此次存储也是在内存中的,如果想备份可以在快照里另存为。方式二:在具体的java进程中右击,保存为线程快照
-
读取线程快照
点击
文件
,选择装入
,文件格式选择.tdump
, 装载即可。 -
检测死锁
下面是一个简单的线程死锁案例
public static void main(String[] args) { StringBuilder s1 = new StringBuilder(); StringBuilder s2 = new StringBuilder(); new Thread() { @Override public void run() { synchronized (s1) { s1.append("a"); s2.append("1"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (s2) { s1.append("b"); s2.append("2"); System.out.println(s1); System.out.println(s2); } } } }.start(); new Thread(new Runnable() { @Override public void run() { synchronized (s2) { s1.append("c"); s2.append("3"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (s1) { s1.append("d"); s2.append("4"); System.out.println(s1); System.out.println(s2); } } } }).start(); }
此时可以看到
检测到死锁标记
Dump 线程快照可以看到一下信息,线程Thread-1,线程 Thread-2处于阻塞状态
visual vm的检测结果
-
-
程序资源的实时监控
-
对于CPU、堆内存、类装载情况、线程数的监控,提供了统一的监控模块;可以点击
执行垃圾回收
手动触发垃圾回收。
-
-
其他功能
- JMX代理连接
- 远程环境监控
- CPU分析和内存分析
- 可插拔插件(建议安装 Visual GC, Startup Profiler, BTrace Wrokbench)