一、JPS(Java Virtual Machine Process Status Tool)
功能描述
jps是用于查看有权访问的hotspot虚拟机的进程. 当未指定hostid时,默认查看本机jvm进程,否者查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。 jps可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信息。
命令格式
jps [options] [hostid]
没添加option的时候,默认列出VM标示符号和简单的class或jar名称
-l : 输出主类全名或jar路径
-q : 只输出LVMID
-m : 输出JVM启动时传递给main()的参数
-v : 输出JVM启动时显示指定的JVM参数
二、JSTAT(JVM Statistics Monitoring Tool)
功能描述
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
命令格式
jstat [options] VMID [interval] [count]
VMID : 本地虚拟机进程ID,即当前运行的java进程号
[interval] : 连续输出的时间间隔,单位为秒或者毫秒
[count] : 连续输出的次数,如果缺省打印无数次
Option | Displays |
---|---|
class | 类加载的行为统计。Statistics on the behavior of the class loader. |
compiler | HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler. |
gc | 垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap. |
gccapacity | 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces. |
gcutil | 垃圾回收统计概述(百分比)。Summary of garbage collection statistics. |
gccause | 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and |
gcnew | 新生代行为统计。Statistics of the behavior of the new generation. |
gcnewcapacity | 新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces. |
gcold | 年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations. |
gcoldcapacity | 年老代行为统计。Statistics of the sizes of the old generation. |
gcpermcapacity | 永生代行为统计。Statistics of the sizes of the permanent generation. |
printcompilation | HotSpot编译方法统计。HotSpot compilation method statistics. |
返回内容解释
C即Capacity 总容量
U即Used 已使用的容量
M即Metaspace元空间,是永久代的替代品
返回名 | 说明 |
---|---|
Loaded | 加载class的数量 |
Bytes | class字节大小 |
Unloaded | 未加载class的数量 |
Bytes | 未加载class的字节大小 |
Time | 加载时间 |
Compiled | 编译数量 |
Failed | 编译失败数量 |
Invalid | 无效数量 |
Time | 编译耗时 |
FailedType | 失败类型 |
FailedMethod | 失败方法的全限定名 |
S0C | survivor0区的总容量 |
S1C | survivor1区的总容量 |
S0U | survivor0区已使用的容量 |
S1C | survivor1区已使用的容量 |
EC | Eden区的总容量 |
EU | Eden区已使用的容量 |
OC | Old区的总容量 |
OU | Old区已使用的容量 |
PC | 当前perm的容量 (KB) |
PU | perm的使用 (KB) |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收时间 |
GCT | 垃圾回收总消耗时间 |
NGCMN | 新生代占用的最小空间 |
NGCMX | 新生代占用的最大空间 |
OGCMN | 老年代占用的最小空间 |
OGCMX | 老年代占用的最大空间 |
OGC | 当前年老代的容量 (KB) |
OC | 当前年老代的空间 (KB) |
PGCMN | perm占用的最小空间 |
PGCMX | perm占用的最大空间 |
LGCC | 最近垃圾回收的原因 |
GCC | 当前垃圾回收的原因 |
TT | Tenuring threshold(提升阈值) |
MTT | 最大的tenuring threshold |
DSS | survivor区域大小 (KB) |
NGC | 当前年轻代的容量 (KB) |
S0CMX | 最大的S0空间 (KB) |
S0C | 当前S0空间 (KB) |
ECMX | 最大eden空间 (KB) |
EC | 当前eden空间 (KB) |
Compiled | 被执行的编译任务的数量 |
Size | 方法字节码的字节数 |
Type | 编译类型 |
Method | 编译方法的类名和方法名。类名使用”/” 代替 “.” 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项 |
三、JINFO(JVM Configuration info)
功能描述
实时查看和调整虚拟机运行参数。之前的jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinfo口令。
命令格式
jinfo [option] < pid >
jinfo [option] [server_id@]< remote server IP or hostname >
-flag:输出指定args参数的值
-flags:输出所有JVM参数的值
-sysprops:输出系统属性,等同于System.getProperties()
如:jinfo -flag MaxPermSize 24971
三、JMAP(JVM Memory Map)
功能描述
命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
命令格式
jmap [option] < pid >
jmap [option] [server_id@]< remote server IP or hostname >
Option | Displays |
---|---|
heap | 显示Java堆详细信息 |
histo | 显示堆中对象的统计信息 |
permstat | Java堆内存的永久保存区域的类加载器的统计信息 |
finalizerinfo | 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象 |
dump | 生成堆转储快照 |
F | 当-dump没有响应时,强制生成dump快照 |
如:jmap -dump:format=b,file=c:/a.bin 8264
四、JHAT(JVM Heap Analysis Tool)
功能描述
与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。
命令格式
jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help]
Option | Displays |
---|---|
-J< flag > | 因为 jhat 命令实际上会启动一个JVM来执行, 通过 -J 可以在启动JVM时传入一些启动参数. 例如, -J-Xmx512m 则指定运行 jhat 的Java虚拟机使用的最大堆内存为 512 MB. 如果需要使用多个JVM启动参数,则传入多个 -Jxxxxxx. |
-stack false/true | 关闭对象分配调用栈跟踪(tracking object allocation call stack)。 如果分配位置信息在堆转储中不可用. 则必须将此标志设置为 false. 默认值为 true. |
-refs false/true | 关闭对象引用跟踪(tracking of references to objects)。 默认值为 true. 默认情况下, 返回的指针是指向其他特定对象的对象,如反向链接或输入引用(referrers or incoming references), 会统计/计算堆中的所有对象。 |
-port port-number | 设置 jhat HTTP server 的端口号. 默认值 7000。 |
-exclude exclude-file | 指定对象查询时需要排除的数据成员列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如, 如果文件列列出了 java.lang.String.value , 那么当从某个特定对象 Object o 计算可达的对象列表时, 引用路径涉及 java.lang.String.value 的都会被排除。 |
-baseline exclude-file | 指定一个基准堆转储(baseline heap dump)。 在两个 heap dumps 中有相同 object ID 的对象会被标记为不是新的(marked as not being new). 其他对象被标记为新的(new). 在比较两个不同的堆转储时很有用。 |
-debug int | 设置 debug 级别. 0 表示不输出调试信息。 值越大则表示输出更详细的 debug 信息。 |
-version | 启动后只显示版本信息就退出。 |
通过jhat -port 7000 mem.dat可以将mem.dat的内容以web的方式暴露到网络,访问http://ip-server:7000查看。
观察是否大量应该被回收的对象在一直被引用或者是否有占用内存特别大的对象无法被回收。
五、JSTACK(Java Stack Trace)
功能描述
用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
命令格式
jstack [-Option] < pid >
-F:当正常输出请求不被响应时,强制输出线程栈堆。
-l:除线程栈堆外,显示关于锁的附加信息。
-m:如果调用本地方法的话,可以显示c/c++的栈堆
如:jstack -m 24971 | more
六、JCONSOLE
功能描述
JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。
分析界面
• 概述: Displays overview information about the Java VM and monitored values.
• 内存: 显示内存使用信息
• 线程: 显示线程使用信息,可检测死锁
• 类: 显示类装载信息
• VM摘要:显示java VM信息
• MBeans: 显示 MBeans.