本文参考多篇大神的文章,不再一一列举,在此表示感谢!
1.进程和线程
1.1 jps 查看进程号 pid jinfo查看参数
ps -ef | grep java | grep -v grep
root 24813 1 0 7月28 ? 00:14:19 java -DclientId=server01 -DgroupId=AAA -DserverIP=hb01 -DserverListenPort=8999 -DserviceRespRequested=true -Dlog4j.root=/home/ntlog/nettyClient01 -jar /home/nettyclient_jar/nettyclient.jar
root 24864 1 0 7月28 ? 00:12:17 java -DclientId=server02 -DgroupId=AAA -DserverIP=hb01 -DserverListenPort=8999 -DserviceRespRequested=true -Dlog4j.root=/home/ntlog/nettyClient02 -jar /home/nettyclient_jar/nettyclient.jar
jps -ml | grep -iv jps
24864 /home/nettyclient_jar/nettyclient.jar
24813 /home/nettyclient_jar/nettyclient.jar
# 查看参数
jinfo 7
$ jinfo -flag <参数名> 虚拟机进程ID
[root@k8s-openapi-68c98997f4-nznhn home]# jinfo -flag NewRatio 7
-XX:NewRatio=1
#打印jvm全部的参数
[root@diamond-dt-b75bb4d4d-kxf9p home]# jinfo -flags 9
#输出当前 jvm 的全部系统属性
[root@diamond-dt-b75bb4d4d-kxf9p home]# jinfo -sysprops 9
1.2 查看进程包含的线程
ps -Lfp pid (ps -mp pid -o THREAD或tid或time)
[root@huabe01 ~]# ps -Lfp 4871
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 4871 1 4871 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4872 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4873 0 15 Jun10 ? 00:00:03 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4874 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4875 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4876 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4877 0 15 Jun10 ? 00:00:05 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4878 0 15 Jun10 ? 00:00:01 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4879 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4880 0 15 Jun10 ? 00:00:49 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4881 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4882 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4884 0 15 Jun10 ? 00:00:05 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 4885 0 15 Jun10 ? 00:00:08 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
root 4871 1 7340 0 15 Jun10 ? 00:00:00 java -jar /home/netty/out/artifacts_server/nettyserver_jar/nettyserver.jar
查看线程的资源使用状况
top -Hp pid
top - 16:33:38 up 22:22, 6 users, load average: 0.30, 0.15, 0.10
Threads: 15 total, 0 running, 15 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882028 total, 85068 free, 842592 used, 954368 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 844324 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4871 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
4872 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.18 java
4873 root 20 0 2534780 86036 11264 S 0.0 4.6 0:03.13 java
4874 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
4875 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
4876 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
4877 root 20 0 2534780 86036 11264 S 0.0 4.6 0:05.09 java
4878 root 20 0 2534780 86036 11264 S 0.0 4.6 0:01.23 java
4879 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
4880 root 20 0 2534780 86036 11264 S 0.0 4.6 0:50.16 java
4881 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.21 java
4882 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.08 java
4884 root 20 0 2534780 86036 11264 S 0.0 4.6 0:05.90 java
4885 root 20 0 2534780 86036 11264 S 0.0 4.6 0:08.46 java
7340 root 20 0 2534780 86036 11264 S 0.0 4.6 0:00.00 java
2.jstack输出线程栈信息
计算线程(如cpu负载较高的线程)的十六进制编码,输出线程的堆栈信息
[root@huabe01 ~]# printf "%x\n" 4872
1308
[root@huabe01 ~]# jstack 4871 | grep 1308
"DestroyJavaVM" #9 prio=5 os_prio=0 tid=0x00007f694c008800 nid=0x1308 waiting on condition [0x0000000000000000]
jstack 3799 > /tmp/3799.log
其他参数
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent 的 ownable synchronizers列表.
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-m 打印java和native c/c++框架的所有栈信息.
-h | -help 打印帮助信息
3.jmap(Memory Map)堆内存信息
jmap -heap 4871
查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
3.1 -dump 使用hprof二进制形式,输出jvm的heap内容到文件
注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。
3.1.1 手动生成
jmap -dump:[live,]format=b,file=<filename> live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
jmap -dump:live,format=b,file=/home/livejmapfile.hprof 24813
jmap -dump:format=b,file=/home/alljmapfile.hprof 24813
39M /home/alljmapfile.hprof
12M /home/livejmapfile.hprof
3.1.2 自动生成dump文件
- -XX:+HeapDumpOnOutOfMemoryError
当OutOfMemoryError发生时自动生成 Heap Dump 文件。这是一个非常有用的参数,因为当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。 - -XX:+HeapDumpBeforeFullGC
当 JVM 执行 FullGC 前执行 dump。 - -XX:+HeapDumpAfterFullGC
当 JVM 执行 FullGC 后执行 dump。 - -XX:+HeapDumpOnCtrlBreak
交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。 - -XX:HeapDumpPath=d:\test.hprof
指定 dump 文件存储路径。
3.1.3 查看dump文件
1.jhat(Java Heap Analysis Tool)2.VisualVM(jvisualvm.exe)3.MAT(内存分析工具)
jhat 浏览器访问 http://127.0.0.1:9998
root@ubuntu:/# jhat -port 9998 /tmp/dump.dat
Reading from /tmp/dump.dat...
Dump file created Tue Jan 28 17:46:14 CST 2014
Snapshot read, resolving...
Resolving 132207 objects...
Chasing references, expect 26 dots..........................
Eliminating duplicate references..........................
Snapshot resolved.
Started HTTP server on port 9998
Server is ready.
3.2 -finalizerinfo 打印正等候回收的对象的信息
jmap -finalizerinfo 24813
Attaching to process ID 24813, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
Number of objects pending for finalization: 0
jmap -finalizerinfo 24864
Attaching to process ID 24864, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
Number of objects pending for finalization: 0
3.3 -heap 打印heap(堆)的概要信息,GC使用的算法,heap的配置及JVM堆内存的使用情况
jmap -heap 24813
Attaching to process ID 24813, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
using thread-local object allocation.
Parallel GC with 18 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 16823353344 (16044.0MB)
NewSize = 350748672 (334.5MB)
MaxNewSize = 5607784448 (5348.0MB)
OldSize = 702021632 (669.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 1221591040 (1165.0MB)
used = 568369176 (542.0390853881836MB)
free = 653221864 (622.9609146118164MB)
46.52696011915739% used
From Space:
capacity = 8388608 (8.0MB)
used = 0 (0.0MB)
free = 8388608 (8.0MB)
0.0% used
To Space:
capacity = 8388608 (8.0MB)
used = 0 (0.0MB)
free = 8388608 (8.0MB)
0.0% used
PS Old Generation
capacity = 1908932608 (1820.5MB)
used = 638166848 (608.6033325195312MB)
free = 1270765760 (1211.8966674804688MB)
33.43055932543429% used
3744 interned Strings occupying 293792 bytes.
jmap -heap 24864
Attaching to process ID 24864, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
using thread-local object allocation.
Parallel GC with 18 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 16823353344 (16044.0MB)
NewSize = 350748672 (334.5MB)
MaxNewSize = 5607784448 (5348.0MB)
OldSize = 702021632 (669.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 245366784 (234.0MB)
used = 25936128 (24.734619140625MB)
free = 219430656 (209.265380859375MB)
10.570350060096153% used
From Space:
capacity = 2097152 (2.0MB)
used = 1989936 (1.8977508544921875MB)
free = 107216 (0.1022491455078125MB)
94.88754272460938% used
To Space:
capacity = 7864320 (7.5MB)
used = 0 (0.0MB)
free = 7864320 (7.5MB)
0.0% used
PS Old Generation
capacity = 702021632 (669.5MB)
used = 4240872 (4.044410705566406MB)
free = 697780760 (665.4555892944336MB)
0.6040942054617485% used
3697 interned Strings occupying 289960 bytes.
3.4 -histo[:live]
jmap -histo:live 24813
jmap -histo:live 24864
[root@ops-registry ~]# jmap -histo:live 3799 | grep java.util.concurrent.LinkedBlockingQueue
99: 238 5712 java.util.concurrent.LinkedBlockingQueue$Node
250: 22 1056 java.util.concurrent.LinkedBlockingQueue
打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
class name是对象类型,说明如下:
B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象
采用jmap -histo pid>a.log日志将其保存,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
3.5 -permstat (版本<=JDK7)
jmap -permstat 24813
jmap -permstat 24864
打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
3.6 其他
-J 传递参数给jmap启动的jvm
4.jstat查看jvm的GC情况 (单位: KB)
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量
命令格式:jstat [-命令选项] [vmid] [采样间隔时间/毫秒] [采样次数]
example: jstat -gc 24813 250 4
4.1 -class 类加载统计
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
jstat -class 24813
Loaded Bytes Unloaded Bytes Time
1877 3624.2 8 8.8 0.63
jstat -class 24864
Loaded Bytes Unloaded Bytes Time
1874 3620.6 0 0.0 0.59
4.2 -compiler 编译统计
Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法
jstat -compiler 24813
Compiled Failed Invalid Time FailedType FailedMethod
3493 0 0 14.76 0
jstat -compiler 24864
Compiled Failed Invalid Time FailedType FailedMethod
3206 2 0 12.74 1 java/lang/ThreadLocal get
4.3 -gc 垃圾回收统计
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:元空间大小
MU:元空间使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
堆内存 = 年轻代 + 年老代 + 永久代 新生区+养老区+元空间(方法区的具体实现)
年轻代 = Eden区 + 两个Survivor区(From和To)
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
MC、MU:方法区容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
jstat -gc 24813
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
8192.0 8192.0 0.0 0.0 1192960.0 476534.9 1864192.0 623209.8 12800.0 12313.0 1536.0 1354.4 17 1.158 5 0.476 1.635
jstat -gc 24864
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
7680.0 2048.0 0.0 1943.3 239616.0 17799.2 685568.0 4141.5 12800.0 12231.0 1536.0 1357.2 7 0.172 0 0.000 0.172
jstat -gc 24813 250 4
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
7168.0 7680.0 0.0 384.0 1523712.0 1469136.0 1293824.0 386288.1 13056.0 12374.9 1536.0 1354.4 19 1.379 6 0.527 1.905
7168.0 7680.0 0.0 384.0 1523712.0 1469136.0 1293824.0 386288.1 13056.0 12374.9 1536.0 1354.4 19 1.379 6 0.527 1.905
7168.0 7680.0 0.0 384.0 1523712.0 1469136.0 1293824.0 386288.1 13056.0 12374.9 1536.0 1354.4 19 1.379 6 0.527 1.905
7168.0 7680.0 0.0 384.0 1523712.0 1469136.0 1293824.0 386288.1 13056.0 12374.9 1536.0 1354.4 19 1.379 6 0.527 1.905
jstat -gc 24864 250 4
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
7680.0 2048.0 0.0 1943.3 239616.0 42096.4 685568.0 4141.5 12800.0 12231.0 1536.0 1357.2 7 0.172 0 0.000 0.172
7680.0 2048.0 0.0 1943.3 239616.0 42096.4 685568.0 4141.5 12800.0 12231.0 1536.0 1357.2 7 0.172 0 0.000 0.172
7680.0 2048.0 0.0 1943.3 239616.0 42096.4 685568.0 4141.5 12800.0 12231.0 1536.0 1357.2 7 0.172 0 0.000 0.172
7680.0 2048.0 0.0 1943.3 239616.0 42096.4 685568.0 4141.5 12800.0 12231.0 1536.0 1357.2 7 0.172 0 0.000 0.172
4.4 -gccapacity 堆内存统计
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
jstat -gccapacity 24813
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
342528.0 5476352.0 1546240.0 8192.0 8192.0 1192960.0 685568.0 10952704.0 1864192.0 1864192.0 0.0 1060864.0 12800.0 0.0 1048576.0 1536.0 17 5
jstat -gccapacity 24864
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
342528.0 5476352.0 292864.0 7680.0 2048.0 239616.0 685568.0 10952704.0 685568.0 685568.0 0.0 1060864.0 12800.0 0.0 1048576.0 1536.0 7 0
4.5 -gcnew 新生代垃圾回收统计
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
jstat -gcnew 24813
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
8192.0 8192.0 0.0 0.0 1 15 8192.0 1192960.0 495515.1 17 1.158
jstat -gcnew 24864
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
7680.0 2048.0 0.0 1943.3 4 15 8192.0 239616.0 18491.3 7 0.172
4.6 -gcnewcapacity 新生代内存统计
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
jstat -gcnewcapacity 24813
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
342528.0 5476352.0 1546240.0 1825280.0 8192.0 1825280.0 8192.0 5475328.0 1192960.0 17 5
jstat -gcnewcapacity 24864
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
342528.0 5476352.0 292864.0 1825280.0 7680.0 1825280.0 2048.0 5475328.0 239616.0 7 0
4.7 -gcold 老年代垃圾回收统计
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcold 24813
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
12800.0 12313.0 1536.0 1354.4 1864192.0 623209.8 17 5 0.476 1.635
jstat -gcold 24864
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
12800.0 12231.0 1536.0 1357.2 685568.0 4141.5 7 0 0.000 0.172
4.8 -gcoldcapacity 老年代内存统计
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcoldcapacity 24813
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
685568.0 10952704.0 1864192.0 1864192.0 17 5 0.476 1.635
jstat -gcoldcapacity 24864
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
685568.0 10952704.0 685568.0 685568.0 7 0 0.000 0.172
4.9 -gcpermcapacity 永久代空间统计(版本<=JDK7)
PGCMN:最小永久代容量
PGCMX:最大永久代容量
PGC:当前新生成的永久代空间大小
PC :永久代空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
4.10 -gcmetacapacity 元数据空间统计 (版本>=JDK8)
MCMN: 最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcmetacapacity 24813
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1060864.0 12800.0 0.0 1048576.0 1536.0 17 5 0.476 1.635
jstat -gcmetacapacity 24864
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1060864.0 12800.0 0.0 1048576.0 1536.0 7 0 0.000 0.172
4.11 -gcutil 总结垃圾回收统计
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcutil 24813
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 44.76 33.43 96.20 88.18 17 1.158 5 0.476 1.635
jstat -gcutil 24864
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 94.89 10.28 0.60 95.55 88.36 7 0.172 0 0.000 0.172
4.12 -printcompilation JVM编译方法统计
Compiled:最近编译方法的数量
Size:最近编译方法的字节码数量
Type:最近编译方法的编译类型
Method:方法名标识
jstat -printcompilation 24813
Compiled Size Type Method
3556 17 1 java/lang/Thread run
jstat -printcompilation 24864
Compiled Size Type Method
3206 42 1 io/netty/util/internal/InternalThreadLocalMap setIndexedVariable
5.其他工具
5.1 jconsole
jconsole远程连接,必须配置JMX连接参数
java
-Djava.rmi.server.hostname=10.160.13.111 #远程服务器ip,即本机ip
-Dcom.sun.management.jmxremote #允许JMX远程调用
-Dcom.sun.management.jmxremote.port=3214 #自定义jmx 端口号
-Dcom.sun.management.jmxremote.ssl=false # 是否需要ssl 安全连接方式
-Dcom.sun.management.jmxremote.authenticate=false #是否需要秘钥
-jar test.jar
5.2 jvisualvm
5.3 jcmd
jcmd $pid GC.run