目录
jstack
描述:jstack命令为指定的Java进程、核心文件或远程调试服务器打印Java线程的Java堆栈跟踪
语法:
jstack [ options ] pid
jstack [ options ] executable core
jstack [ options ] [ server-id@ ] remote-hostname-or-IP
参数:
executable: 从中生成核心转储的Java可执行文件。
core: 要为其打印堆栈跟踪的核心文件
remote-hostname-or-IP: 远程调试服务器主机名或IP地址。
server-id: 在同一远程主机上运行多个调试服务器时要使用的可选唯一ID
options:
-F 强制线程转储。当jstack没有响应时使用(进程挂起)
-m 打印java和本机帧(混合模式)
-l long listing. 打印有关锁的附加信息
查看线程堆栈:
查看cpu占用高进程: top
查看cpu占用高线程: top -H -p
转换线程ID(thread_id): printf "%x\n" [thread_id]
查看高线程堆栈信息: jstack | grep -A 50
jstat
描述:监视Java虚拟机(JVM)统计信息。
语法:
jstat -options vmid [ interval[s|ms] [ count ]
参数:
vmid 虚拟机标识符,它是指示目标JVM的字符串。一般语法如下:[protocol:][//]lvmid[@hostname[:port]/servername]
interval [s|ms] 以指定单位(秒或毫秒)表示的采样间隔。默认单位为毫秒。一定是正整数。指定时,jstat命令会在每个间隔生成其输出。
count 要显示的样本数。默认值是无穷大,这会导致jstat命令显示统计信息,直到目标JVM终止或jstat命令终止。此值必须是正整数
options:
-help 显示帮助消息。
-options 显示选项列表。请参见输出选项。
-class 显示有关类装入器行为的统计信息。
-compiler 显示有关Java HotSpot VM实时编译器行为的统计信息。
-gc 显示有关垃圾收集堆行为的统计信息。
-gccapacity 显示有关各代及其相应空间的容量的统计信息。
-gccause 显示有关垃圾收集统计信息的摘要(与-gcutil相同),最后和当前垃圾回收事件的原因。
-gcnew 显示新生代行为的统计信息。
-gcnewcapacity 显示有关新生代及其相应空间的大小的统计信息。
-gcold 显示有关老年代行为的统计信息和元空间统计信息。
-gcoldcapacity 显示有关老年代大小的统计信息。
-gcmetacapacity 显示有关元空间大小的统计信息。
-gcutil 显示有关垃圾收集统计信息的摘要。
-printcompilation 显示JavaHotSpot VM编译方法统计信息。
-h n 每n个样本(输出行)显示一个列标题,其中n是正整数。默认值为0,显示列标题数据的第一行。
-t 将时间戳列显示为输出的第一列。时间戳是自目标JVM的开始时间起的时间。
-JjavaOption 将javaOption传递给Java应用程序启动程序。例如,-J-Xms48m将启动内存设置为48mb。
解析查询信息:
-class:
Loaded: 加载的类数量.
Bytes: 加载的KB数。
Unloaded: 卸载的类数。
Bytes: 卸载的KB数。
Time: 执行类加载和卸载操作所花费的时间。
-compiler:
Compiled: 执行的编译任务数。
Failed: 失败的编译任务数。
Invalid: 无效的编译任务数。
Time: 执行编译任务所花费的时间。
FailedType: 上次失败编译的编译类型。
FailedMethod: 上次失败编译的类名和方法。
-gc
S0C: 当前幸存者空间0 容量(kB)。
S1C: 当前幸存者空间1 容量(kB)。
S0U: 幸存者空间0利用率(kB)。
S1U: 幸存者空间1利用率(kB)。
EC: 当前伊甸区空间容量(kB)。
EU: 伊甸区空间利用率(kB)。
OC: 当前老年代空间容量(kB)。
OU: 老年代空间利用率(kB)。
MC: 元空间容量(kB)。
MU: 元空间利用率(kB)。
CCSC: 压缩类空间容量(kB)。
CCSU: 使用的压缩类空间(kB)。
YGC: 年轻一代垃圾回收事件数。
YGCT: 年轻一代的垃圾收集时间。
FGC: Full GC事件数。
FGCT: Full GC收集时间。
GCT: 总垃圾收集时间。
-gccapacity
NGCMN: 最小新生代容量(kB)。
NGCMX: 最大新生代容量(kB)。
NGC: 当前新生代容量(kB)。
S0C: 当前幸存者空间0 容量(kB)。
S1C: 当前幸存者空间1 容量(kB)。
EC: 当前伊甸区空间容量(kB)。
OGCMN: 最小老年代容量(kB)。
OGCMX: 最大年代容量(kB)。
OGC: 当前老年代容量(kB)。
OC: 当前老年代空间容量(kB)。
MCMN: 最小元空间容量(kB)。
MCMX: 最大元空间容量(kB)。
MC: 元空间容量(kB)。
CCSMN: 压缩类空间最小容量(kB)。
CCSMX: 压缩类空间最大容量(kB)。
CCSC: 压缩类空间容量(kB)。
YGC: 年轻代GC事件数。
FGC: FULL GC事件数。
-gccause
LGCC: 上次垃圾回收的原因
GCC: 当前垃圾回收的原因
-gcnew
TT: Tenuring threshold. 年轻代晋升老年代(年龄)阈值
MTT: Maximum tenuring threshold. 年轻代晋升老年代最大(年龄)阈值
DSS: Desired survivor size (kB). (一个)survivor区的大小*TargetSurvivorRatio/100(TargetSurvivorRatio默认50))
三者关系: 从所有年龄=0的对象占的空间开始累加,直到加上年龄=n的所有对象的空间之后的空间容量大于DSS时,
TT=n<MTT?n:MTT
-gcnewcapacity
S0CMX: 最大幸存者空间0容量(kB)。
S1CMX: 最大幸存者空间1容量(kB)。
ECMX: 最大伊甸区空间容量(kB)。
-gcutil
S0: Survivor space 0 区已使用空间的百分比
S1: Survivor space 1 区已使用空间的百分比
E: Eden space 区已使用空间的百分比
O: Old space 区已使用空间的百分比
M: 元空间利用率占空间当前容量的百分比。
CCS: 压缩类已使用空间的百分比
-printcompilation
Compiled: 最近编译的方法执行的编译任务数。
Size: 最近编译的方法的字节码的字节数。
Type: 最近编译的方法的编译类型。
Method: 类名和方法名,用于标识最近编译的方法
jmap
描述:打印进程、核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息。
语法:
jmap [ options ] pid
jmap [ options ] executable core
jmap [ options ] [ pid ] server-id@ ] remote-hostname-or-IP
参数:
executable: 从中生成核心转储的Java可执行文件。
core: 要为其打印堆栈跟踪的核心文件
remote-hostname-or-IP: 远程调试服务器主机名或IP地址。
server-id: 在同一远程主机上运行多个调试服务器时要使用的可选唯一ID
options:
-dump:[live,] format=b, file=filename: 将hprof二进制格式的Java堆转储到filename。live子选项是可选的,但是当指定时,只转储堆中的活动对象。要浏览堆转储,可以使用jhat命令读取生成的文件。
-finalizerinfo 打印有关等待完成的对象的信息.
-heap 打印所使用的垃圾收集的堆摘要、头配置和按生成的堆使用情况。此外,还打印了插入字符串的数量和大小。
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-clstats 打印Java堆的类装入器统计信息。对于每个类装入器,都会打印其名称、活动程度、地址、父类装入器以及装入的类的数量和大小。
-F 强制。当pid没有响应时,将此选项与jmap-dump或jmap-histo选项一起使用。此模式不支持live子选项。
-J 指定传递给运行jmap的JVM的参数
说明: dump,clstats耗时并且会暂停应用, histo:live会触发full gc
解析 -heap 查询信息:
using parallel threads in the new generation. :在新一代中使用并行线程。
using thread-local object allocation. :本地线程分配
Concurrent Mark-Sweep GC :cms gc
Heap Configuration:堆配置情况
MinHeapFreeRatio最小堆使用比例
MaxHeapFreeRatio最大堆可用比例
MaxHeapSize最大堆空间大小
NewSize新生代分配大小
MaxNewSize最大可新生代分配大小
OldSize老年代大小
NewRatio新生代比例
SurvivorRatio新生代与suvivor的比例
MetaspaceSize 元空间
CompressedClassSpaceSize 压缩类空间大小
MaxMetaspaceSize 最大元空间大小
G1HeapRegionSize G1区域的大小
Heap Usage:堆使用情况
New Generation (Eden + 1 Survivor Space):新生代(伊甸区Eden区 + 幸存区survior空间)
capacity 容量
used 已经使用大小
free 剩余容量
xx% used 使用比例
Eden Space: 伊甸区
From Space: survior1区
To Space: survior2区
concurrent mark-sweep generation: 老生代使用情况
43703 interned Strings occupying 4543800 bytes.
jhat
描述:命令解析Java堆转储文件并启动web服务器
语法:
jhat [ options ] heap-dump-file
参数:
heap-dump-file:要浏览的Java二进制堆转储文件。对于包含多个堆转储的转储文件,可以指定, 例如,在文件名后面附加
options:
-stack false|true 关闭跟踪对象分配调用堆栈。默认值是true。
-refs false|true 关闭对对象引用的跟踪。默认值为true。默认情况下,返回指针是指向为堆中的所有对象计算指定的对象(如引用或传入引用)
-port port-number 设置jhat HTTP服务器的端口。默认值为7000。
-exclude exclude-file 指定列出了应当从可及的对象查询排除数据成员的文件
-baseline exclude-file 指定基准堆转储。在具有相同的对象ID两个堆转储对象被标记为不是新对象。这是用于比较两个不同的堆转储有用。
-debug int 设置此工具的调试级别。级别为0表示没有调试输出。为更详细的模式设置更高的值。
-version 版本号
-h, -help 显示帮助消息
-Jflag 将标志传递给运行jhat命令的Java虚拟机。例如,-J-Xmx512m使用最大堆大小为512 MB。