JVM(03):JVM常见内存监控、性能调优等命令详解
程序员文章站
2022-06-07 07:54:03
...
1、jps:JVM Process Status Tool:
显示指定系统内所有的HotSpot虚拟机进程。
1.1、命令格式:
jps [ options ] [ hostid ]
比如:jps
1.2、options 选项说明
1.2.1、-q:只输出LVMID,省略主类的名称
1.2.2、-m:输出虚拟机进程启动时传递给主类main()函数的参数
1.2.3、-l:输出主类的全名,如果进程执行的是jar包,输出jar包路径
1.2.4、-v:输出虚拟机进程启动时的JVM参数
2、jstat:虚拟机统计信息监视工具
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机的类装载、内存、垃圾收集、JIT编译等运行数据。
2.1、jstat命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- opetion:操作类型,可jstat -options 查看可操作的类型
- vmid:vimd和lvmid:如果是本地虚拟机进程,VMID和LVMID一致。如果是远程虚拟机进程,VMID的格式为:
[ protool: ] [ // ] lmid [ @hostname [ :port ] /servername ]
参数interval和count查询间隔和次数,如果省略该参数,则表示只查询一次。
例如:jstat -gc 2764 250 20 表示每隔250毫秒查询一下内存收集情况,一共查询20次。
- lines:显示开头num行记录
- interval:间隔毫米数
- count:查询次数
2.2、option参数
可通过如下命令查看option选项:jstat -options
- -class:监视类装载、卸载数量、总空间及类装载所耗费的时间。
- -gc:监视Java堆情况,包括Eden区、2个surivivor区、老年代、永久代等容量、已用空间、GC时间合计等信息。
- -gccapacity:与gc基本相同,输出主要关注Java堆各个区域使用到的最大和最小空间。
- -gcutil:与gc基本相同,输出主要关注已使用空间占总空间的百分比。
- -gccause:与gc基本一样,会额外输出导致上一次gc的原因。
- -gcnew:监视新生代gc状况。
- -gcnewcapacity:与gcnew一样,输出主要关注使用到的最大和最小空间。
- -gcold:监视老年代。
- -gcoldcapacity:与gcold一样,输出主要关注使用到的最大和最小空间。
- -gcpermcapacity:输出永久代使用到的最大和最小空间。
- -compiler:输出JIT编译器编译过的方法、耗时等信息。
- -printcompilation:输出已经被JIT编译的方法。
2.3、命令示例
2.3.1、查看gc统计时间:
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- EC:Eden区的大小
- EU:Eden区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小(元空间)
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间,单位sFGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间,单位s
- GCT:垃圾回收消耗总时间,单位s
2.3.2、查看堆统计信息
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:当前新生代容量
- S0C:第一个幸存区大小
- S1C:第二个幸存区的大小
- EC:Eden区的大小
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:当前老年代大小
- OC:当前老年代大小
- MCMN:最小元数据容量
- MCMX:最大元数据容量
- MC:当前元数据空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代gc次数
- FGC:老年代GC次数
2.3.3、新生代垃圾回收统计
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- TT:对象在新生代存活的次数
- MTT:对象在新生代存活的最大次数
- DSS:期望的幸存区大小
- EC:伊甸园区的大小
- EU:伊甸园区的使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
2.3.4、新生代内存统计
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:当前新生代容量
- S0CMX:最大幸存1区大小
- S0C:当前幸存1区大小
- S1CMX:最大幸存2区大小
- S1C:当前幸存2区大小
- ECMX:最大伊甸园区大小
- EC:当前伊甸园区大小
- YGC:年轻代垃圾回收次数FGC:老年代回收次数
2.3.5、老年代垃圾回收统计
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- OC:老年代大小
- OU:老年代使用大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
2.3.6、老年代内存统计
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:当前老年代大小
- OC:老年代大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
2.3.7、元数据空间统计
- MCMN:最小元数据容量
- MCMX:最大元数据容量
- MC:当前元数据空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
2.3.8、已使用空间占总空间的百分比
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:伊甸园区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
3、jinfo:Java配置信息工具
jinfo(Configuration Info for Java)可以实时的查看和调整虚拟机的各项参数。使用jps -v可以查看虚拟机启动时显式指定的参数列表。
3.1、用法
jinfo指令格式
- jinfo [option] <pid>:查询正在运行的进程的jvm参数
- jinfo [option] <executable <core>:查询核心进程的相关信息
- jinfo [option] [aaa@qq.com]<remote server IP or hostname>:查询远程虚拟机的相关信息
Option参数说明:
- -flag <name>:显示指定参数的值
- -flag [+|-]<name>:使用或禁止JVM某个参数
- -flag <name>=<value>:设置JVM某个参数的值
- -flags:显示应用JVM所有参数信息
- -sysprops:显示JVM系统参数信息
- <no option>:显示JVM系统级别和应用级别信息
- -h | -help:显示该指令的帮助操作信息
3.2、显示JVM所有的参数
3.3、查看某个JVM参数的值,比如:查看MaxNewSize的值
3.4、查看Java系统参数
4、jstack:java堆栈信息查看工具
主要用来生成虚拟机当前时刻的线程快照,也就是当前虚拟机内每一条线程正在执行的方法堆栈集合信息。主要用来分析线程出现长时间停顿的原因,比如线程间死锁、死循环、请求外部资源长时间等待等问题。
4.1、用法
jstack [ option ] vmid
4.2、option 参数说明
- -F:当请求不被响应时,强制输出线程堆栈信息
- -m:如果调用本地方法,则显示C/C++堆栈信息
- -l:处堆栈外,显示关于锁的附加信息
- -h:输出帮助信息
4.3、命令参数使用样例
4.3.1、-l:显示关于锁的附加信息
4.3.2、-m:显示堆栈信息,包括C/C++
5、jmap:Java内存映像工具
该命令主要用于生成堆转储快照,一般称为heapdump或者dump文件。其他获取堆转储快照的方式相对暴力,有如下几种:
- 配置-XX:HeapDumpOnOutMemoryError:让虚拟机在OOM异常后自动生成dump快照。
- 配置-XX:HeapDumpOnCtrlBreak:可以使用Ctrl+Break让虚拟机生成dump快照。
- Linux系统下通过kill -3发出进程退出信号来恐吓虚拟机,也能生成dump文件。
5.1、jmap命令操作
jmap格式
- jmap [option] <pid>:查询正在运行的进程的jvm内存快照
- jmap [option] <executable <core>:查询核心进程jvm内存快照
- jmap [option] [aaa@qq.com]<remote server IP or hostname>:查询远程虚拟机的内存快照信息
5.2、option指令格式:
- -dump:生成java堆转储快照。
- -finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象。
- -heap:显示java堆详细信息。比如:使用哪种收集器、参数配置、分代情况等。
- -histo:显示堆中的统计信息,包括类、实例数量、合计容量
- -F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。
5.3、操作指令示例
5.3.1、-dump:生成java堆转储快照。例如
jmap -dump:live,format=b,file=open.log 968 获取对中存活对象的快照
jmap -dump:format=b,file=open.log 968 获取堆中所有对象的快照
5.3.2、-finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象。
当前系统执行finalization:0, 数量为0。
5.3.3、-heap:显示java堆详细信息。比如:使用哪种收集器、参数配置、分代情况等。
5.3.4、-histo:显示堆中的统计信息,包括类、实例数量、合计容量
jmap -histo:live pid:显示存活的对象的统计信息
- num:序号
- instances:实际数量
- bytes:占用空间大小
- class name:详细类名、对象名等信息。
5.3.5、-F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。
6、jhat:虚拟机堆转储快照分析工具
6.1、命令格式
Usage: jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
-J<flag> Pass <flag> directly to the runtime system. For
example, -J-mx512m to use a maximum heap size of 512MB
-stack false: Turn off tracking object allocation call stack.
-refs false: Turn off tracking of references to objects
-port <port>: Set the port for the HTTP server. Defaults to 7000
-exclude <file>: Specify a file that lists data members that should
be excluded from the reachableFrom query.
-baseline <file>: Specify a baseline object dump. Objects in
both heap dumps with the same ID and same class will
be marked as not being "new".
-debug <int>: Set debug level.
0: No debug output
1: Debug hprof file parsing
2: Debug hprof file parsing, no server
-version Report version number
-h|-help Print this help and exit
<file> The file to read