JVM性能优化之JVM调试工具
前言
前面文章简单的对JVM进行了简单的讲解,又说了几个在JVM调试过程中用到的操作指令,但是我们还是喜欢用可视化界面去看数据,这样简洁直观。本文就简单的说两个常用的JVM可视化调试工具。
一、 JConsole
JConsole是JDK自带的Java监控和管理平台,主要用于JVM内存和线程的监控。存放在JDK安装目录的bin文件夹中。
直接双击运行并选择一个本地项目打开看一下:
内存监控
我们看一下内存使用情况栏:
上面下拉选项可以看到我们可以检测这些位置的内存使用情况(主要是堆空间),以及使用曲线;下面是具体的使用数据:总内存大小、已使用情况及垃圾回收情况。我们就可以根据内存的使用情况来查找问题,比如内存使用过高,然后再看是哪个区使用过高,执行GC后是否还是内存过高,来判断可能出现的问题。
线程监控
再看一下线程监控界面
同样是线程曲线,下面具体的有多少线程,分别是什么线程,点击后右面会出现相应的线程信息,同时下面还有个检测死锁功能,我们点击检测死锁按钮会显示死锁的线程,就可以通过堆栈跟踪去找到对应的线程去分析代码逻辑,什么情况下产生了死锁。关于死锁在前面的线程博客里面有讲解,也可以自己写一个死锁Demo去试验一下。
二、JVisualVM
JVisualVM也是JDK中自带的可视化工具,同样可以查看本地应用以及远程服务器上应用程序的相关数据,同时它还会捕获相关的数据保存在本地,可以后期再查看。
这是JVisualVM的界面,可以看到它可以查看本地应用、远程应用、以及JVM日志dump文件和快照文件。
在工具里面还有插件选项,如果觉得功能不够可以选择相应的插件安装后重启VisualVM观察
例如我们安装Visual GC插件查看下GC执行信息,可以看到它显示的很全面,每个区的情况都有,而且在一个界面上我们就可以查看全局,比JConsole使用上好用点,毕竟这个JConsole大功能全面。
下面来看一下来自带的每部分功能:
概述就不看了,下面位监视栏,可以看CPU占用、堆内存、类的加载信息以及线程情况,右上角还有个堆快照,点击堆快照会显示并生成对应的堆快照文件。
线程栏可以查看所有的线程,以及他们的运行情况运行时间等信息,同样有线程快照通过快照可以定位到具体线程的位置。
看一下抽样器栏,抽样器有CPU抽样和内存抽样,CUP抽样可以看具体CPU信息以及每个线程锁占用的CPU情况,内存抽样同样可以看到每个线程锁占用的内存信息,以及后面有柱状图查看每个线程中内存分配情况。
后面性能分析栏,这个地方有点问题,我性能分析的时候把服务给卡死了,这个对性能影响太大了,不要在生产环境乱搞。我再写一个简单的demo方法试试。
点击查看性能分析会看到控制台打印建立性能分析。
下面是性能分析中内存结果,是每个类的内存使用情况以及所占空间,而CPU性能分析会统计每个方法的执行次数和销号的时间。