本文所列是基于JDK1.6版本,对于不同版本的JDK执行效果和命令参数等可能不完全一致。
jmap
命令:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
功能说明:
Jmap可以将指定的JVM(通过进程号、CORE文件或者调试服务器指定)的堆内内存使用情况(如堆内各个对象的数量)打印出来。如果该进程是运行于64位的JAVA平台,需要指定-J-64参数。
在开销方面,jmap引起的额外开销很小,类似于一次full gc。
参数说明:
不带任何参数:打印出指定JAVA虚拟机中的共享对象。包括了加载的每个共享对象的起始地址、大小和完整的路径。
如:
[webjoin@dd webjoin]$ jmap 7121
Attaching to process ID 7121, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 11.0-b11
0x06000000 5294K /webjoin/local/java/jre/lib/i386/client/libjvm.so
0x08048000 46K /webjoin/local/java/bin/java
0xb4ae5000 93K /webjoin/local/java/jre/lib/i386/libnet.so
0xb739a000 74K /webjoin/local/java/jre/lib/i386/libzip.so
0xb73ab000 184K /webjoin/local/java/jre/lib/i386/libjava.so
0xb73d0000 55K /webjoin/local/java/jre/lib/i386/libverify.so
……
-dump:[live,]format=b,file=<filename>:以hprof二进制文件类型将虚拟机堆的信息保存到指定的文件中。如果指定了 live 参数,将只会打印处于生存状态的对象信息(保存虚拟机信息前强制虚拟机执行full gc)。可以通过 jhat 命令浏览保存的文件(具体参见后面的jhat的使用说明)。
如:
[webjoin@dd webjoin]$ jmap -dump:format=b,file=heap_dump.log 7121
Dumping heap to /webjoin/heap_dump.log ...
Heap dump file created
-finalizerinfo:打印当前正在等待最终化的对象。
如:
[webjoin@dd webjoin]$ jmap -finalizerinfo 7121
Attaching to process ID 7121, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 11.0-b11
Number of objects pending for finalization: 0
-heap:打印虚拟机堆的概要信息,堆的配置信息以及堆中各代的详细信息
如:
[webjoin@dd webjoin]$ jmap -heap 7121
Attaching to process ID 7121, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 11.0-b11
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 67108864 (64.0MB)
NewSize = 1048576 (1.0MB)
MaxNewSize = 4294901760 (4095.9375MB)
OldSize = 4194304 (4.0MB)
NewRatio = 12
SurvivorRatio = 8
PermSize = 12582912 (12.0MB)
MaxPermSize = 67108864 (64.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 983040 (0.9375MB)
used = 747960 (0.7133102416992188MB)
free = 235080 (0.22418975830078125MB)
76.08642578125% used
Eden Space:
capacity = 917504 (0.875MB)
used = 746904 (0.7123031616210938MB)
free = 170600 (0.16269683837890625MB)
81.40607561383929% used
From Space:
capacity = 65536 (0.0625MB)
used = 1056 (0.001007080078125MB)
free = 64480 (0.061492919921875MB)
1.611328125% used
To Space:
capacity = 65536 (0.0625MB)
used = 0 (0.0MB)
free = 65536 (0.0625MB)
0.0% used
tenured generation:
capacity = 6336512 (6.04296875MB)
used = 4027552 (3.840972900390625MB)
free = 2308960 (2.201995849609375MB)
63.56102537168714% used
Perm Generation:
capacity = 12582912 (12.0MB)
used = 5205408 (4.964263916015625MB)
free = 7377504 (7.035736083984375MB)
41.368865966796875% used
-histo[:live]:打印堆中所有对象的数量、占用内存大小以及对象的完整名成。内部类将以*作为前缀。如果指定了live参数,则将只有存活的对象被记录(执行前将会强制虚拟机完成一次FullGC)
如:
[webjoin@dd webjoin]$ jmap -histo:live 7121|more
num #instances #bytes class name
----------------------------------------------
1: 10754 1408464 <constMethodKlass>
2: 15626 1263480 [C
3: 10754 860384 <methodKlass>
4: 16263 739600 <symbolKlass>
5: 854 577056 <constantPoolKlass>
6: 20943 502632 java.lang.String
7: 954 433912 [B
8: 1976 420672 [I
……
-permstat:打印堆中永久代的类加载器的统计信息。包括了每个类加载器的名称、存活状态、地址、父加载器以及所加载的类的数量与大小
如:
[webjoin@dd webjoin]$ jmap -permstat 7121
Attaching to process ID 7121, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 11.0-b11
15066 intern Strings occupying 1255240 bytes.
finding class loader instances ..Unknown oop at 0x8b797d80
Oop's klass is null
Finding object size using Printezis bits and skipping over...
done.
computing per loader stat ..done.
please wait.. computing liveness...........................................................................................done.
class_loader classes bytes parent_loader alive? type
<bootstrap> 1073 2716752 null live <internal>
0x8bcc75e0 1 1456 0x8bc33f10 dead sun/reflect/DelegatingClassLoader@0x93f33140
0x8bf368c0 1 904 0x8bc33f10 dead sun/reflect/DelegatingClassLoader@0x93f33140
0x8bd36610 0 0 0x8bc20dd8 live java/util/ResourceBundle$RBClassLoader@0x9401ab90
0x8bc354c8 167 498120 0x8bc20dd8 live org/apache/catalina/loader/StandardClassLoader@0x8f75e1d8
0x8bf98a08 1 1456 0x8bc33f10 dead sun/reflect/DelegatingClassLoader@0x93f33140
……
total = 63 2042 5712456 N/A alive=16, dead=47 N/A
-F:强制。当使用dump或者histo参数进程不响应时使用。此模式下,-live参数不能使用
-h、-help:打印帮助信息
-J<flag> :将flag作为参数传递给jmap运行的虚拟机
如:
-J-64就是将-64传递给运行jmap的虚拟机,表示以64位模式运行jmap
Jhat
命令:
jhat [ options ] <heap-dump-file>
功能说明:
jhat命令分析一个java堆内存的dump文件,并同时启动一个WEB服务器,可以通过浏览器察看文件所保存的堆的信息。Jhat还支持一种类似于SQL的OQL语言件所堆的dump。OQL的帮助在jhat中内置,可以在运行jhat后通过http://localhost:7000/oqlhelp/来获得。
要想获得dump文件,可以通过如下几种方式:
使用jmap -dump 获得运行期间的堆的dump文件
使用jconsole通过HotSpotDiagnosticMXBean获得运行期间的堆的dump文件
虚拟机通过-XX:+HeapDumpOnOutOfMemoryError 参数启动,在发生OutOfMemoryError时会自动生成dump文件
使用hprof.
参数说明:
-stack false/true:关闭对对象分配的调用关系栈的追踪。如果在dump文件中没有分配信息,就需要将此参数设置为false。默认为true.
-refs false/true:关闭对对象引用关系的追踪。默认为true。就是说默认情况下会对堆中所有对象分析对其引用的对象。
-port 端口号:设置jhat启动的WWW服务器的服务端口号
-exclude 文件名称:通过文件配置在可达对象查询时不用包括的数据的列表。比如文件中包括了java.lang.String.value,在任何时候分析对于从某一对象可达的对象列表的时候,都不会考虑java.lang.String.value域
-baseline 文件名称:指定用于比较的堆的dump文件。在两个堆中均存在的对象ID将不会被标识为new,其它的对象将会被表示为new。这在比较两个不同的堆dump文件时会很有用。
-debug int:设置debug级别,0表示没有调试输出,对于更多的交互模式可以设置更高的值
-version:打印版本信息
-h、-help:打印帮助信息
-J<flag> :将flag作为参数传递给jmap运行的虚拟机
如:
-J-64就是将-64传递给运行jhat的虚拟机,表示以64位模式运行
jps
命令:
jps [ options ] [ hostid ]
功能说明:
类似于ls,jps是用于专门显示JVM进程的。jps受权限限制,只能获得其具有访问权限的JVM进程。
在不指定hostid的情况下运行jps,将在本地服务器上查询JVM进程。如果指定了hostid,将会去查询指定的服务器上查询JVM进程,追踪查询是通过特定的端口和协议实现的,在目标服务器需要有jstatd在运行。
参数说明:
-q:只显示进程号,不显示其它任何信息
-m:打印出传递给main方法的参数,对于内嵌的虚拟机,此项可能为null
-l:打印出应用的main class的完整包名或者应用程序的jar文件的完整路径名
-v:打印出传递给JVM的参数
-V:打印通过flags文件(.hotspotrc 文件或者通过参数指定 -XX:Flags=<filename> argument)传递给虚拟机的参数() -XX:Flags=<filename> argument).
-J<flag> :将flag作为参数传递给jmap运行的虚拟机
如:
-J-64就是将-64传递给运行jhat的虚拟机,表示以64位模式运行
hprof
命令:
java -agentlib:hprof[=options] ToBeProfiledClass
java -Xrunhprof[:options] ToBeProfiledClass
功能说明:
hprof是java自带的用于性能监控的工具,可以对堆内内存和CPU的使用进行监控和记录。hprof实际上是一个JVM的本地代理库,在JVM启动时通过命令行参数动态加载,成为JVM进程的一部分。通过hprof,用户可以得到关于堆和内存的不同的性能特征。Hprof可以一文本或者二进制格式保存文件,可以用于跟踪和隔离引起包括内存的使用是执行效率较低的性能问题的代码。Hprof生成的二进制文件可以通过一些工具,如jhat,浏览堆中的对象创建情况。
J2SE1.5之后,hprof是通过Java Virtual Machine Tool Interface(JMTI)技术实现的。
参数说明:
help:显示帮助信息
java -agentlib:hprof=help
Option Name and Value Description Default
--------------------- ----------- -------
heap=dump|sites|all heap profiling all
cpu=samples|times|old CPU usage off
monitor=y|n monitor contention n
format=a|b text(txt) or binary output a
file=<file> write data to file java.hprof[{.txt}]
net=<host>:<port> send data over a socket off
depth=<size> stack trace depth 4
interval=<ms> sample interval in ms 10
cutoff=<value> output cutoff point 0.0001
lineno=y|n line number in traces? y
thread=y|n thread in traces? n
doe=y|n dump on exit? y
msa=y|n Solaris micro state accounting n
force=y|n force output to <file> y
verbose=y|n print messages about dumps y
Obsolete Options
----------------
gc_okay=y|n
Examples
--------
- Get sample cpu information every 20 millisec, with a stack depth of 3:
java -agentlib:hprof=cpu=samples,interval=20,depth=3 classname
- Get heap usage information based on the allocation sites:
java -agentlib:hprof=heap=sites classname
Notes
-----
- The option format=b cannot be used with monitor=y.
- The option format=b cannot be used with cpu=old|times.
- Use of the -Xrunhprof interface can still be used, e.g.
java -Xrunhprof:[help]|[<option>=<value>, ...]
will behave exactly the same as:
java -agentlib:hprof=[help]|[<option>=<value>, ...]
Warnings
--------
- This is demonstration code for the JVMTI interface and use of BCI,
it is not an official product or formal part of the JDK.
- The -Xrunhprof interface will be removed in a future release.
- The option format=b is considered experimental, this format may change
in a future release.
file:性能监控数据保存的文件名称。默认为java.hprof.txt。一般情况下输出信息会包括路径、线程和对象的ID。每一类型的ID会采用与其他类型ID不同的数字作为开头。比如说,路径的ID一般以300000作为开始。
force:默认情况下(force=y),输出信息是将会将文件原有的内容清除。因此,如果需要多虚拟机同时通过hprof性能监控,就应当使用force=n,这样将会根据需要把一些附加的字符串附加在文件名的最后。
interval:本参数只在cpu=samples时生效,用于控制取样线程在对线程堆栈的采样之间的休眠时间。
msa:只在Solaris操作系统有效,引发使用Solaris的Solaris Micro State Accounting
depth:hprof记录的追踪栈的最大深度。默认为4
thread:设置此参数为y,将使得hprof纪录追踪栈时区分线程
heap:设置此参数为site,hpof将包括如下形式的内容。此部分按照对象名称以及创建对象的trace stack(在记录文件中可以根据trace的对应值找到)显示堆中内存的分配情况。
Command used: javac -J-agentlib:hprof=heap=sites Hello.javaSITES BEGIN (ordered by live bytes) Fri Oct 22 11:52:24 2004
percent live alloc'ed stack class
rank self accum bytes objs bytes objs trace name
1 44.73% 44.73% 1161280 14516 1161280 14516 302032 java.util.zip.ZipEntry
2 8.95% 53.67% 232256 14516 232256 14516 302033 com.sun.tools.javac.util.List
3 5.06% 58.74% 131504 2 131504 2 301029 com.sun.tools.javac.util.Name[] 4 5.05% 63.79% 131088 1 131088 1 301030 byte[]
5 5.05% 68.84% 131072 1 131072 1 301710 byte[]
设置heap为dump,hprof将记录堆中对象的完整信息,生成的文件很大,不过可以使用任何的文本编辑器察看,但是建议采用jhat来查看,这样将会更为方便。采用这种方式除了以上heap=site的内容将会记录外,每个对象与其它对象的创建和引用关系的一些细节也会进行记录。
cpu:设置为samples,hprof通过取样线程获得CPU数据。如:
Command used: javac -J-agentlib:hprof=cpu=samples Hello.java
CPU SAMPLES BEGIN (total = 126) Fri Oct 22 12:12:14 2004
rank self accum count trace method
1 53.17% 53.17% 67 300027 java.util.zip.ZipFile.getEntry
2 17.46% 70.63% 22 300135 java.util.zip.ZipFile.getNextEntry
3 5.56% 76.19% 7 300111 java.lang.ClassLoader.defineClass2
4 3.97% 80.16% 5 300140 java.io.UnixFileSystem.list
5 2.38% 82.54% 3 300149 java.lang.Shutdown.halt0
6 1.59% 84.13% 2 300136 java.util.zip.ZipEntry.initFields
7 1.59% 85.71% 2 300138 java.lang.String.substring
8 1.59% 87.30% 2 300026 java.util.zip.ZipFile.open
9 0.79% 88.10% 1 300118 com.sun.tools.javac.code.Type$ErrorType.<init>
10 0.79% 88.89% 1 300134 java.util.zip.ZipFile.ensureOpen
hprof定期对所有的运行中的线程堆栈取样,以记录其中最活跃的stack trace。其中的count域是指一个特定的栈被发现活跃的次数,而不是该方法被调用的次数。这些stack trace负荷了应用程序中CPU使用的热点。此参数不需要对所加载的类进行修改,对被监控的应用程序的运行性能也只有很小的影响。
设置为times,hprof通过在每个方法的入口和出口植入代码的方式获得CPU的使用信息,保持对每个方的的调用次数和花费时间的精确跟踪。由于使用了代码注入,与cpu=samples相比程序运行速度会降低。输出信息如下:
Command used: javac -J-agentlib:hprof=cpu=times Hello.java
CPU TIME (ms) BEGIN (total = 103099259) Fri Oct 22 12:21:23 2004
rank self accum count trace method
1 5.28% 5.28% 1 308128 com.sun.tools.javac.Main.compile
2 5.16% 10.43% 1 308127 com.sun.tools.javac.main.Main.compile
3 5.15% 15.58% 1 308126 com.sun.tools.javac.main.Main.compile
4 4.07% 19.66% 1 308060 com.sun.tools.javac.main.JavaCompiler.compile
5 3.90% 23.56% 1 306652 com.sun.tools.javac.comp.Enter.main
6 3.90% 27.46% 1 306651 com.sun.tools.javac.comp.Enter.complete
7 3.74% 31.21% 4 305626 com.sun.tools.javac.jvm.ClassReader.listAll
8 3.74% 34.95% 18 305625 com.sun.tools.javac.jvm.ClassReader.list
这里的count显示了方法的实际被调用次数,百分数表示花费在这些方法上的线程时间的百分比。
hprof可以生成二进制文件并使用jhat工具浏览。
jstack
命令:
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
功能说明:
jstack打印出指定JVM内的所有线程的堆栈追踪信息,虚拟机信息可以是本地的进程、CORE文件或者是远端的调试服务器。
参数说明:
直接运行:
打印内容类似如下:
[webjoin@dd bin]$ jstack 7121
2008-06-12 10:19:08
Full thread dump Java HotSpot(TM) Client VM (11.0-b11 mixed mode, sharing):
"Attach Listener" daemon prio=10 tid=0x083ed400 nid=0x1c35 waiting on condition [0x00000000..0xb40c4648]
java.lang.Thread.State: RUNNABLE
"TP-Monitor" daemon prio=10 tid=0x08178800 nid=0x1c03 in Object.wait() [0xb4115000..0xb4115480]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x8bf7a220> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:564)
- locked <0x8bf7a220> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
at java.lang.Thread.run(Thread.java:619)
"TP-Processor4" daemon prio=10 tid=0x08177400 nid=0x1c02 runnable [0xb4166000..0xb4166600]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
- locked <0x8bf7a2c8> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:312)
at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:666)
at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:876)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
如程序中发生死锁,则在最后会打印出如下信息:
"Thread-1":
at com.ebupt.test.thread.DeadLockThread.run(DeadLock.java:44)
- waiting to lock <0x8b747f98> (a java.lang.Object)
- locked <0x8b747fa0> (a java.lang.Object)
"Thread-0":
at com.ebupt.test.thread.DeadLockThread.run(DeadLock.java:44)
- waiting to lock <0x8b747fa0> (a java.lang.Object)
- locked <0x8b747f98> (a java.lang.Object)
Found 1 deadlock.
信息中包括类的全名、方法名、字节代码索引(BCI)以及行号。
-F 通过增加此参数强制对未响应的JVM执行操作,获得栈追踪的信息
-l 长列表。输出更多的关于锁(如实现了同步访问的列表)的附加的信息
-m 打印混合模式(包括java和本地的c/c++)的栈追踪信息
-h 打印帮助信息.
-help 打印帮助信息
jsdebugd
命令:
jsadebugd pid [ server-id ]
jsadebugd executable core [ server-id ]
功能说明:
jsadebugd依附到一个Java进程或CORE文件并且担当一个调试服务器的作用。远程客户,例如jstack、jmap和jinfo,都能够通过Java RMI依附到该服务器。在启动jsadebugd前,需要先执行rmiregistry -J-Xbootclasspath/p:$JAVA_HOME/lib/sajdi.jar启动远程对象注册表。如果没有启动远程对象注册表,jsadebugd将在标准的1099端口启动远程对象注册表。
参数说明:
pid 调试服务器需要依附的进程号。该进程号必须是一个java进程。
executable 生成core文件的可执行的java程序。
core 调试服务器需要依附的CORE文件。
server-id 唯一的服务器标识,当同一台服务器上启用多个调试服务器时作为调试服务器的标识。远端客户端通过该ID连上特定的调试服务器。
jinfo
命令:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP
功能说明:
jsadebugd依附到一个Java进程或CORE文件并且担当一个调试服务器的作用。远程客户,例如jstack、jmap和jinfo,都能够通过Java RMI依附到该服务器。在启动jsadebugd前,需要先执行rmiregistry -J-Xbootclasspath/p:$JAVA_HOME/lib/sajdi.jar启动远程对象注册表。如果没有启动远程对象注册表,jsadebugd将在标准的1099端口启动远程对象注册表。
参数说明:
<no option> 打印命令行参数以及系统属性的名称和值
-flag name
打印指定命令行标志的名称和值
-flag [+|-]name
允许或禁止指定的命令行标志
-flag name=value
设置指定的命令行标志为指定的值
-flags
打印传递给JVM的命令行标志的名称和值
-sysprops
打印JAVA系统属性信息的名称与值.
-h 打印帮助信息
-help打印帮助信息
jstat
命令:
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
功能说明:
jstat工具用于显示虚拟机的性能统计信息。
参数说明:
generalOption 命令行选项,具体说明见后面
-help 显示帮助信息
-version 显示版本信息
-options 显示统计选项清单
outputOptions 一个或多个输出选项,确认jstat要显示的统计信息
class 类加载器的行为统计
compiler HotSpot的JIT(Just-In-Time)的行为统计
gc 堆垃圾收集的行为统计
gccapacity 各代以及其相应的空间的能力统计
gccause 最近一次以及当前的垃圾收集事件的垃圾收集统计概要信息
gcnew Young区的行为统计
gcnewcapacity Young区以及其对应空间的大小的统计
gcold Old以及Permnent区的行为统计信息
gcoldcapacity Old区大小的统计信息
gcpermcapacity Permanent区大小的统计信息
gcutil 垃圾收集的概要信息
printcompilation HotSpot编译方法统计信息
vmid 用于指定目标虚拟机的字符串。本地的可以直接写虚拟机进程号;远端的一般形同[protocol:][//]lvmid[@hostname[:port]/servername],要想通过jstat获得远端虚拟机统计信息,需要在远端启动jstatd服务器
protocol:指定了通讯协议。过protocol和hostname都没指定,默认的就是经过优化的本地通讯协议;如果没有指定protocol而指定了hostname,则默认采用RMI协议
lvmid:虚拟机的本地进程号
hostname:服务器名称或地址
port:与远端服务器通讯端口号,如指定protocol为RMI,端口号默认为1099
servername:当使用协议为RMI时,表示在远端服务器上的RMI远端对象名称
输出说明:
-class option
Class Loader Statistics
Loaded 加载的类的数量
Bytes 加载的KB数
Unloaded 写在的类的数量
Bytes 卸载的KB数
Time 在类的加载和卸载上花费的时间开销
-compiler Option
HotSpot Just-In-Time Compiler Statistics
Compiled 完成的编译任务个数
Failed 失败的编译任务个数
Invalid 非法的编译任务个数
Time 完成编译任务的花费时间
FailedType 最后一次编译失败的编译类型
FailedMethod 最后一次编译失败的类和方法名称
-gc Option
Garbage-collected heap statistics
S0C 当前0号Survivor的大小,单位为KB
S1C 当前1号Survivor的大小,单位为KB
S0U 0号Survivor空间的使用情况,单位为KB
S1U 1号Survivor空间的使用情况,单位为KB
EC 当前的Eden区的空间大小,单位为KB
EU Eden的空间的使用情况,,单位为KB
OC 当前的Old区的空间大小,单位为KB
OU Old的空间的使用情况,,单位为KB
PC 当前的Permanent区的空间大小,单位为KB.
PU Permanent的空间的使用情况,,单位为KB
YGC Young区的GC事件次数
YGCT Young 区的GC时间
FGC FullGC 发生次数
FGCT FullGC时间
GCT 垃圾收集总时间
-gccapacity Option
Memory Pool Generation and Space Capacities
NGCMN Young区最小大小,单位为KB
NGCMX Young区最大大小,单位为KB
NGC Young区当前大小,单位为KB
S0C 0号Survivor区当前大小,单位为KB
S1C 1号Survivor区当前大小,单位为KB
EC Eden区当前大小,单位为KB
OGCMN Old区最小大小,单位为KB
OGCMX Old区最大大小,单位为KB
OGC Current old generation capacity (KB).
OC Current old space capacity (KB).
PGCMN Permanent区最小大小,单位为KB
PGCMX Permanent区最大大小,单位为KB
PGC Current Permanent generation capacity (KB).
PC Current Permanent space capacity (KB).
YGC Young区GC总数Number of Young generation GC Events.
FGC FullGC总数
-gccause Option
除了包含了最后一次以及当前的垃圾收集事件的愿因,此选项显示的概要信息与-gcutil相同。相比-gcutil,此选项的输出增加了如下列:
LGCC 引发最后一次垃圾收集的原因.
GCC 引发当前垃圾收集的原因
-gcnew Option
New Generation Statistics
S0C 0号Survivor区当前大小,单位为KB
S1C 1号Survivor区当前大小,单位为KB
S0U 0号Survivor空间的使用情况,单位为KB
S1U 1号Survivor空间的使用情况,单位为KB
TT 持有次数限制
MTT 最大持有次数限制
DSS Desired survivor size (KB).
EC 当前的Eden区的空间大小,单位为KB
EU Eden的空间的使用情况,,单位为KB
YGC Young区的GC事件次数
YGCT Young 区的GC时间
-gcnewcapacity Option
New Generation Space Size Statistics
NGCMN Young区最小大小,单位为KB
NGCMX Young区最大大小,单位为KB
NGC Young区当前大小,单位为KB
S0CMX 0号Survivor的最大大小,单位为KB
S0C 当前0号Survivor的大小,单位为KB
S1CMX 1号Survivor的最大大小,单位为KB
S1C 当前1号Survivor的大小,单位为KB
ECMX Eden区最大大小,单位为KB
EC 当前的Eden区的空间大小,单位为KB
YGC Young区GC总数
FGC FullGC总数
-gcold Option
Old and Permanent Generation Statistics
PC 当前Permanent的容量,单位为KB
PU Permanent的已用大小,单位为KB
OC 当前Old的容量,单位为KB
OU Old的已用大小,,单位为KB
YGC Young区GC总数
FGC FullGC总数
FGCT FullGC总时间
GCT GC总时间
-gcoldcapacity Option
Old Generation Statistics
OGCMN Old最小容量,单位为KB
OGCMX Old最大容量,单位为KB
OGC Current old generation capacity (KB).
OC Current old space capacity (KB).
YGC Young区GC总数
FGC FullGC总数
FGCT FullGC总时间
GCT GC总时间
-gcpermcapacity Option
Permanent Generation Statistics
PGCMN Permanent区最小大小,单位为KB
PGCMX Permanent区最大大小,单位为KB
PGC Current permanent generation capacity (KB).
PC Current permanent space capacity (KB).
YGC Young区GC总数
FGC FullGC总数
FGCT FullGC总时间
GCT GC总时间
-gcutil Option
Summary of Garbage Collection Statistics
S0 0号Survivor空间当前使用百分比(已使用/当前容量)
S1 1号Survivor空间当前使用百分比(已使用/当前容量)
E Eden空间当前使用百分比(已使用/当前容量)
O Old空间当前使用百分比(已使用/当前容量)
P Permanent空间当前使用百分比(已使用/当前容量)
YGC Young区GC总数
YGCT Young区GC总时间
FGC FullGC总数
FGCT FullGC总时间
GCT GC总时间
-printcompilation Option
HotSpot Compiler Method Statistics
Compiled 完成得编译任务的个数
Size 方法的字节数
Type 编译类型
Method 标示被编译方法的类名与方法名。类名中使用“/”而不是“.”作为命名空间分隔符。方法名称是在该类中的方法。这两个部分的格式与HotSpot中 - XX:+PrintComplation 的选项一致。
jstatd
命令:
jstatd [ options ]
功能说明:
jstatd是一个虚拟机的监控工具,对远端监控工具提供了连接上本地虚拟机并对其进行监控的接口。
参数说明:
Options
-nr 没有找到RMI注册表时也不要创建jstatd进程内置的RMI注册表
-p port 查找RMI注册表的端口号,如果没指定-nr选项且在端口没有找到RMI注册表,就自行创建一个
-n rminame 绑定在RMI注册表的远端RMI对象名称。默认名为JStatRemoteHost。如果在同一台主机上同时启动了多个jstatd服务器,可以通过此选项为各个服务器指定不同的名称。采用此方式后,客户端在连接服务器时提供的hostid和vmid中需要包含此指定的服务器名称。
-Joption 类似jmap等工具的-J的参数,可以传递参数给虚拟机