VisualVM(All-in-One Java Trouble shootingTool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以预见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。
官方在VisualVM的软件说明中写上了“All-in-One”的描述字样,预示着它除了运行监视、故障处理外,还提供了很多其他方面的功能。如性能分析Profiling),VisualVM的性能分析功能甚至比起JProfiler、YourKit等专业且收费的Profiling工具都不会逊色多少,而且VisualVM的还有一个很大的优点:不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能的影响很小,使得它可以直接应用在生产环境中。这个优点是JProfiler、YourKit等工具无法与之媲美的。
在命令行输入jvisualvm:
可以直接看到本地启动了那些java线程,同样jvisualvm 也支持远程连接,远程连接远程配置参考上一篇博客(JVM的监控工具之jconsole):
本地连接远程如下所示:
首先输入远程的主机名以及显示名称:
接下来是右键添加JMX链接:
如图配置:
可以正常链接到远程:可以看到远程的tomcat进程信息:
VisualVM能做到什么?VisualVM可以做到:
1、显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
2、监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。
3、dump以及分析堆转储快照(jmap、jhat)。
4、方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
5、离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
面板各项参数作用介绍:
和JConsole差不多,很多显示的东西都是重合的JVM参数和我们用jps输出的是一样的,系统属性和我们用命令jinfo -sysprops看到的是一样的。如图所示:
概述页签可以看到java 进程的一些属性参数和JVM参数:
(2)监视
和我们的JConsole界面显示的很类似对吧。堆的大小、元数据空间的大小等等。堆dump就是可以导出我们当前线程的堆转储文件,其实就相当于我们jdk的命令行中执行jmap的命令。
如图所示:监视页签可以从CPU占用,堆内存占用,元数据空间大小,以及线程数等维度进行监控,同样也可以进行来及回收,对快照分析等:
(3)线程
同样也有Dump,同样是和我们JDK命令行工具的jstack是一样的操作。可以生成虚拟机当前时刻的线程快照。如图所示:
线程页签可以从线程的状态,以及线程快照进行分析: