赞
踩
1、找出排查的Jar包pid
指令 jps -l 查看本机java进程信息
innovent-boss-service.jar 是需要排查的java应用
jps -ml查看更详细的运行参数
- 126912 innovent-boss-service.jar --spring.profiles.active=prod --server.port=9320 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC
- 63347 -- process information unavailable
- 36787 innovent-mic-service.jar --spring.profiles.active=test --server.port=9323 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC
- 64340 innovent-system-extend.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=171.16.0.190:8848 --spring.cloud.nacos.config.server-addr=172.16.21.190:8848 --server.port=9213
- 86215 sun.tools.jps.Jps -ml
2、接着看jvm内存分配情况
指令 jmap -heap 126912 查看jar包的内存分配情况
- using thread-local object allocation.
- Parallel GC with 2 thread(s) //使用的垃圾收集器 Parallel GC
-
- Heap Configuration: //堆内存初始化配饰
- MinHeapFreeRatio = 0 //堆最小空闲比率
- MaxHeapFreeRatio = 100//堆最大空闲比率
- MaxHeapSize = 4294967296 (4096.0MB)//堆最大大小
- NewSize = 1431306240 (1365.0MB)//堆新生代的默认大小
- MaxNewSize = 1431306240 (1365.0MB)//堆新生代的最大大小
- OldSize = 2863661056 (2731.0MB)//老年代大小
- NewRatio = 2//新生代和老年代的大小比率
- SurvivorRatio = 8//年轻代中Eden区域survivor区的大小比率
- MetaspaceSize = 21807104 (20.796875MB)// 元空间大小
- CompressedClassSpaceSize = 1073741824 (1024.0MB)//压缩空间大小
- MaxMetaspaceSize = 17592186044415 MB// 最大元空间大小
- G1HeapRegionSize = 0 (0.0MB)
-
- Heap Usage:
- PS Young Generation
- Eden Space:
- capacity = 1393557504 (1329.0MB)
- used = 1344963592 (1282.6572341918945MB)
- free = 48593912 (46.34276580810547MB)
- 96.51295968336302% used
- From Space:
- capacity = 18350080 (17.5MB)
- used = 12300992 (11.73114013671875MB)
- free = 6049088 (5.76885986328125MB)
- 67.03508649553571% used
- To Space:
- capacity = 18874368 (18.0MB)
- used = 0 (0.0MB)
- free = 18874368 (18.0MB)
- 0.0% used
- PS Old Generation
- capacity = 2863661056 (2731.0MB)
- used = 92418968 (88.1375961303711MB)
- free = 2771242088 (2642.862403869629MB)
- 3.2273012131223395% used
-
- 48060 interned Strings occupying 4988304 bytes.
3.查看堆中对象数量和大小
[root@Dashboard-Boss01 ~]# jstack 126912
- 126912: 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
我们报错了 是应为当前是用户root ,而我是用jenkins发布的应用 所以得用发布应用的用户执行
查看应用执行用户 ps -aux|grep innovent-boss-service.jar
- [root@Dashboard-Boss01 ~]# ps -aux|grep innovent-boss-service.jar
- root 86275 0.0 0.0 112812 992 pts/0 S+ 17:25 0:00 grep --color=auto innovent-boss-service.jar
- jenkins 126912 1.2 11.5 7038584 1915508 ? Sl Dec03 109:34 java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=innovent-boss-service -Xms4g -Xmx4g -jar innovent-boss-service.jar --spring.profiles.active=prod --server.port=9320 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC
可以看到我的执行用户是jenkins
切换用户 jenkins
4、查看垃圾回收情况
jstat指令 6秒打印一次显示20行
- [root@Dashboard-Boss01 ~]# jstat -gc 126912 6000 20
- S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
- 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 67017.3 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 67025.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 71978.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 72292.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 72320.4 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 73537.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 73537.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
- 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
S0C:年轻代第一个survivor的容量(字节)
S1C:年轻代第二个survivor的容量(字节)
S0U:年轻代第一个survivor已使用的容量(字节)
S1U:年轻代第二个survivor已使用的容量(字节)
EC:年轻代中Eden的空间(字节)
EU:年代代中Eden已使用的空间(字节)
OC:老年代的容量(字节)
OU:老年代中已使用的空间(字节)
PC:永久代的容量
PU:永久代已使用的容量
YGC:从应用程序启动到采样时年轻代中GC的次数
YGCT:从应用程序启动到采样时年轻代中GC所使用的时间(单位:S)
FGC:从应用程序启动到采样时老年代中GC(FULL GC)的次数
FGCT:从应用程序启动到采样时老年代中GC所使用的时间(单位:S)
5、GC日志分析-我们先通过一条《深入理解java虚拟机》一书中的一个例子gc日志来回顾一下gc日志的基本知识,下面是一条gc日志:
从左至右,各个信息的意思为:
- 33.125: 自虚拟机启动以来经过的秒数,单位为秒;
- GC: 垃圾收集的停顿类型为不需要STW(Stop The World )。如果是Full GC说明发生了STW。如果是Full GC (System)说明是调用System.gc()方法所触发的收集。
- DefNew:表示GC发生的区域在新生代。这个名称和所使用的收集器密切相关。可以有Tenured、Perm、ParNew、PSYoungGen等等。其中hotspot虚拟机使用的是PSYoungGen代表新生代
- 3324k->152k(3712k):GC前该区域(DefNew)已使用容量->GC后该区域已使用容量(该内存区域总容量)
- 0.0025925 secs:该内存区域(DefNew)GC所占用的时间。
- 3324k->152k(11904k):GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。