本文参考多篇大神的文章,不再一一列举,在此表示感谢!
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
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
计算线程(如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]
其他参数
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent 的 ownable synchronizers列表.
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-m 打印java和native c/c++框架的所有栈信息.
-h | -help 打印帮助信息
jmap -heap 4871
查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。
jmap -dump:[live,]format=b,file=
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
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.
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
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.
jmap -histo:live 24813
jmap -histo:live 24864
打印每个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回收了哪些对象。
jmap -permstat 24813
jmap -permstat 24864
打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-J 传递参数给jmap启动的jvm
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量
命令格式:jstat [-命令选项] [vmid] [采样间隔时间/毫秒] [采样次数]
example: jstat -gc 24813 250 4
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
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
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:年老代容量和使用量
PC、PU:永久代容量和使用量
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
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
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
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
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
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
PGCMN:最小永久代容量
PGCMX:最大永久代容量
PGC:当前新生成的永久代空间大小
PC :永久代空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
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
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
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