文章主目录
jstat
注以下命令 后面加个毫秒数可以每多少毫秒采集一次
类加载统计
root@iZ2ze2u21foywir3wp68o6Z dubbo_service]# jstat -class 10755 Loaded(加载class的数量kb) Bytes(所占用空间大小kb) Unloaded(未加载数量kb) Bytes(未加载占用空间kb) Time(时间) 15780 30092.6 210 282.2 8.39
编译统计
[root@iZ2ze2u21foywir3wp68o6Z dubbo_service]# jstat -compiler 10755 Compiled(编译数量) Failed(失败数量) Invalid(不可用数量) Time (时间) FailedType(失败类型) FailedMethod(失败方法) 20007 3 0 98.91 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run
gc统计
jstat -gc 10755 1000 #1秒采集一次 jstat -gc 1075
S0C:年轻代中 To Survivor 的容量(单位 KB); S1C:年轻代中 From Survivor 的容量(单位 KB); S0U:年轻代中 To Survivor 目前已使用空间(单位 KB); S1U:年轻代中 From Survivor 目前已使用空间(单位 KB); EC:年轻代中 Eden 的容量(单位 KB); EU:年轻代中 Eden 目前已使用空间(单位 KB); OC:Old 代的容量(单位 KB); OU:Old 代目前已使用空间(单位 KB); MC:Metaspace 的容量(单位 KB); MU:Metaspace 目前已使用空间(单位 KB); YGC:从应用程序启动到采样时年轻代中 gc 次数; YGCT:从应用程序启动到采样时年轻代中 gc 所用时间 (s); FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数; FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用时间 (s); GCT:从应用程序启动到采样时 gc 用的总时间 (s)。
堆内分配统计
jstat -gccapacity 10755
NGCMN:新生代最小容量 NGCMX:新生代最大容量 NGC:当前新生代容量 S0C:第一个幸存区大小 S1C:第二个幸存区的大小 EC:伊甸园区的大小 OGCMN:老年代最小容量 OGCMX:老年代最大容量 OGC:当前老年代大小 OC:当前老年代大小 MCMN:最小元数据容量 MCMX:最大元数据容量 MC:当前元数据空间大小 CCSMN:最小压缩类空间大小 CCSMX:最大压缩类空间大小 CCSC:当前压缩类空间大小 YGC:年轻代gc次数 FGC:老年代GC次数
新生代gc和内存情况统计
jstat -gcnew 10755
S0C:第一个幸存区大小 S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 TT:对象在新生代存活的次数 MTT:对象在新生代存活的最大次数 DSS:期望的幸存区大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间
老年代gc和内存情况统计
MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 OC:老年代大小 OU:老年代使用大小 YGC:年轻代垃圾回收次数 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
老年代垃圾回收统计
jstat -gcold 10755
老年代内存统计
jstat -gcoldcapacity 10755
OGCMN:老年代最小容量 OGCMX:老年代最大容量 OGC:当前老年代大小 OC:老年代大小 YGC:年轻代垃圾回收次数 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
jdk1.7永久代统计
jstat -gcpermcapacity 19570
PGCMN:最小永久代容量 PGCMX:最大永久代容量 PGC:当前新生成的永久代空间大小 PC :永久代空间大小 YGC:年轻代垃圾回收次数 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
JDK8 下 元数据空间统计
jstat -gcmetacapacity 10755
1 2 3 4 5 6 7 8 9 10 |
|
总结垃圾回收统计
jstat -gcutil 10755
1 2 3 4 5 6 7 8 9 10 |
|
jstack
统计线程数量
1 |
|
各个线程状态
1 |
|
高CPU占用排查
用来dump线程的堆栈信息 排查死锁和高cpu代码定位
1 2 3 |
|
JMAP
查看jvm配置以及内存信息
1.通过ps -ef找到PID
ps -ef|grep "程序名字"
2.通过jmap打印jvm信息
jmap -heap PID
如果出现: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.191-b12. Target VM is 错误可能是系统装了多jdk,定位到当前jdk 指定使用binn下面的jmap
[root@kuaihe-test3 bin]# ./jmap -heap 19751 Attaching to process ID 19751, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.181-b13 #垃圾回收器信息 using thread-local object allocation. # 指的是本地线程分配缓冲(TLAB,Thread Local Allocation Buffer)。并不是栈上分配(Stack Allocation,HotSpot暂时没有做这项优化)。 Parallel GC with 8 thread(s) #并行 8个gc线程 Heap Configuration: MinHeapFreeRatio = 0 #最小堆使用比例 MaxHeapFreeRatio = 100 #最大堆使用比例 MaxHeapSize = 4164943872 (3972.0MB) #最大堆空间大小 NewSize = 87031808 (83.0MB) #新生代分配大小 MaxNewSize = 1388314624 (1324.0MB) #最大新生代可分配大小 OldSize = 175112192 (167.0MB) #老年代大小 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 = 742391808 (708.0MB) used = 9056640 (8.6370849609375MB) free = 733335168 (699.3629150390625MB) 1.2199272543697033% used From Space: capacity = 2097152 (2.0MB) used = 0 (0.0MB) free = 2097152 (2.0MB) 0.0% used To Space: capacity = 13631488 (13.0MB) used = 0 (0.0MB) free = 13631488 (13.0MB) 0.0% used PS Old Generation capacity = 2776629248 (2648.0MB) used = 2699893784 (2574.8193588256836MB) free = 76735464 (73.1806411743164MB) 97.23638062030527% used
配置解读
View Code
dump内存信息
jmap -dump:format=b,file=/Users/liqiang/Desktop/logs/heap.hprof pid
查看存活对象情况
#只统计存活对象 jmap -histo:live 11230 //只统计存活对象 jmap -histo:live 11230 >/root/histo.txt //输出到指定路径
#包含未存活对象 jmap -histo 11230 jmap -histo: 11230 >/root/histo.txt //输出到指定路径
查看正在等待执行finalizer方法的对象
jmap -finalizerinfo 10755//10755为PID
说明当前F-Queue队列中并没有等待Finalizer线程执行finalizer方法的对象。
在jvm回收时标记为垃圾对象,等待被回收时的对象
查看 & 分析 GC 日志
-XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -Xloggc:../logs/gc.log 日志文件的输出路径
参数配置
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs
gc日志
View Code
gcviewer
下载地址:https://sourceforge.net/projects/gcviewer/ 将日志拖到gcviewer或者使用gcviewer打开
各个参数详解见github:https://github.com/chewiebug/GCViewer
GCeasy
将gc日志压缩上传https://www.gceasy.io/index.jsp
各个代分配情况 以及最大峰值使用情况
各个停顿时间的次数和所占百分比 以及最大停顿和平均停顿时间
各个代回收次数 以及停顿时间统计
报错解决
17107: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
1.切换到指定进程的用户执行命令。
2.切换到sdk目录尝试https://www.cnblogs.com/LQBlog/p/12896443.html