JVM在运行过程中,我们可以利用各种工具对JVM进行分析,这是性能调优的利器。可以通过各种工具了解在系统运行过程中,在JVM底层到底发生了什么。JVM分析工具一般分为两种,一种是命令行工具,一种是图形界面工具。
JDK自带的命令行工具都在jdk的bin目录下(C:\Program Files\Java\jdk1.8.0_291\bin)。内置的命令行工具可以帮助我们系统运行过程中JVM内部的运行过程。主要的工具有如下
命令行指令具体用法在csdn上有大量文章可以参考,以下会列出几个比较常用的指令作为参考。
可以通过jstat -options查看jstat可以支持的参数类型
如采样100次,每次间隔100ms
jstat -gcutil pid 100 100
jmap指令可以查看堆内存占用的一些情况
如jmap -histo 33824,查看33824进程的堆占用情况
jstack属于线程堆栈分析工具
如jstack -l 33824,查看进程33824的堆栈信息
jcmd可以理解成前面所有命令的集合。这个指令用的比较多,如果不记得jcmd可以支持哪些参数,可以输入jcmd pid help指令
jjs指令是java命令行脚本执行工具,可以解释字形javascript脚本
命令行分析工具虽然能给JVM分析提供方便,但没有图形界面交互风格友好。目前,JVM提供以下几种图形化界面工具可以给开发者分析JVM运行分析。
直接在命令界面,输入jconsole命令即可启动jconsole工具(windows系统是在”运行“框输入”cmd",弹出小黑框再输入“jconsole”即可)。jconsole聚焦于监控JVM内存、线程、CPU等使用情况及发展趋势。
jdk8大概从26开始,jvisualvm都没有被直接打包进jdk,所以直接通过jvisualvm命令,不会打开jvisualvm。可以去官网直接下载jvisualvm工具,下载之后再使用。下载地址为:visualvm.github.io。jvisualvm比较核心的是CPU抽样器。也可以直接点击如下链接进行资源下载
jvisualvm包下载路径:jvisualvm资源包
jmc功能非常强大,不仅包括jconsole及jvisualvm功能,还有一个飞行记录的能力,把一段时间段内,JVM的变化记录下来,从而对jvm内部各种状态进行分析(包括内存、cpu)。
从2020年7月以后,jmc就已经不再打包到jdk,jdk默认不带jmc,所以需要手工下载。
jmc包下载和使用教程可以参考jmc包和部署教程