将会打印出很多jvm运行时参数信息,由于比较长这里不再打印出来,可以自己试试,内容一目了然
Jstack(Stack Trace for Java):JVM堆栈跟踪工具
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64“
命令格式:jstack [ option ] pid
常用参数说明:
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有栈信息.
-h | -help打印帮助信息
例如:
Cmd命令行代码
C:\Users\Administrator>jstack1796
-05-2211:42:38
FullthreaddumpJavaHotSpot(TM)ClientVM(20.6-b01mixedmode):
"Worker-30"prio=6tid=0x06514c00nid=0x1018inObject.wait()[0x056af000]
java.lang.Thread.State:TIMED_WAITING(onobjectmonitor)
atjava.lang.Object.wait(NativeMethod)
atorg.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
-locked<0x1ad84a90>(aorg.eclipse.core.internal.jobs.WorkerPool)
atorg.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
atorg.eclipse.core.internal.jobs.Worker.run(Worker.java:50)
......
......
......
......
jstat(JVM statistics Monitoriing Tool):JVM统计信息监视工具
对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heapsize和垃圾回收状况的监控
命令格式:jstat[option pid [interval [ s | ms ] [count] ] ]
常用参数说明:
-gcutil 输出已使用空间占总空间的百分比
-gccapacity 输出堆中各个区域使用到的最大和最小空间
例如:每隔1秒监控jvm内存一次,共监控5次
Cmd命令行代码
C:\Users\Administrator>jstat-gccapacity17961s5
NGCMNNGCMXNGCS0CS1CECOGCMNOGCMXOGCOCPGCMNPGCMXPGCPCYGCFGC
13632.0174720.040896.04032.04032.032832.027328.0349568.081684.081684.012288.0262144.080640.080640.04296
13632.0174720.040896.04032.04032.032832.027328.0349568.081684.081684.012288.0262144.080640.080640.04296
13632.0174720.040896.04032.04032.032832.027328.0349568.081684.081684.012288.0262144.080640.080640.04296
13632.0174720.040896.04032.04032.032832.027328.0349568.081684.081684.012288.0262144.080640.080640.04296
13632.0174720.040896.04032.04032.032832.027328.0349568.081684.081684.012288.0262144.080640.080640.04297
Cmd命令行代码
C:\Users\Administrator>jstat-gcutil17961s5
S0S1EOPYGCYGCTFGCFGCTGCT
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
0.000.000.5253.3599.77420.5139938.11938.632
一些术语的中文解释:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制
jmap( Memory Map for Java):JVM内存映像工具
打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)
命令格式:jmap [ option ] pid
常用参数说明:
-dump:[live,]format=b,file=使用二进制形式输出jvm的heap内容到文件中,live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-histo[:live]打印每个class的实例数目,内存占用,类全名信息.VM的内部类名字开头会加上前缀”*”.如果live子参数加上后,只统计活的对象数量.
-F强迫.在pid没有相应的时候使用-dump或者-histo参数.在这个模式下,live子参数无效.
例如:以二进制形式输入当前堆内存映像到文件data.hprof中
Cmd命令行代码
jmap-dump:live,format=b,file=data.hprof1796
生成的文件可以使用jhat工具进行分析,在OOM(内存溢出)时,分析大对象,非常有用
通过使用如下参数启动JVM,也可以获取到dump文件:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pid.hprof
在jvm发生内存溢出时生成内存映像文件
jhat(JVM Heap Analysis Tool):JVM堆转储快照分析工具
用于对JAVAheap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析,如LINUX上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题。
命令格式:jhat dumpfile(jmap生成的文件)
例如:分析jmap导出的内存映像
Cmd命令行代码
jhatdata.hprof
MAT(Memory Analyzer Tool):一个基于Eclipse的内存分析工具
这是eclipse的一个插件,安装后可以打开xxx.hprof文件,进行分析,比jhat更方便使用,有些时候由于线上xxx.hprof文件过大,直接使用jhat进行初步分析了,可以的话拷贝到本地分析效果更佳。
图形化监控工具:
在JDK安装目录bin下面有两个可视化监控工具
1. JConsole(Java Monitoring and Management Console) 基于JMX的可视化管理工具。
2. VisualVM(All-in-one Java Troubleshooting Tool)随JDK发布的最强大的运行监视和故障处理程序。
推荐使用VisualVM,他有很多插件,可以更方便的监控运行时JVM