关于[Full GC (System.gc()) 引发的问题和排查,JVM调优相关

首先看一下GC的日志:

Java HotSpot(TM) 64-Bit Server VM (25.191-b12) for linux-amd64 JRE (1.8.0_191-b12), built on Oct  6 2018 05:43:09 by "java_re" with gcc 7.3.0
Memory: 4k page, physical 3881344k(841728k free), swap 16773116k(16463460k free)
CommandLine flags: -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=1073741824 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
1.249: [GC (Metadata GC Threshold) [PSYoungGen: 173036K->17342K(305664K)] 173036K->17358K(1005056K), 0.0219606 secs] [Times: user=0.02 sys=0.01, real=0.02 secs]
1.271: [Full GC (Metadata GC Threshold) [PSYoungGen: 17342K->0K(305664K)] [ParOldGen: 16K->16475K(699392K)] 17358K->16475K(1005056K), [Metaspace: 20736K->20736K(1067008K)], 0.0400390 secs] [Times: user=0.06 sys=0.01, real=0.04 secs]
2.995: [GC (Metadata GC Threshold) [PSYoungGen: 172146K->20960K(305664K)] 188622K->37436K(1005056K), 0.0296121 secs] [Times: user=0.05 sys=0.01, real=0.03 secs]
3.024: [Full GC (Metadata GC Threshold) [PSYoungGen: 20960K->0K(305664K)] [ParOldGen: 16475K->25311K(699392K)] 37436K->25311K(1005056K), [Metaspace: 33966K->33964K(1079296K)], 0.0789127 secs] [Times: user=0.14 sys=0.00, real=0.08 secs]
137.270: [GC (System.gc()) [PSYoungGen: 248285K->22330K(305664K)] 273596K->47649K(1005056K), 0.0246304 secs] [Times: user=0.03 sys=0.01, real=0.02 secs]
137.295: [Full GC (System.gc()) [PSYoungGen: 22330K->0K(305664K)] [ParOldGen: 25319K->34744K(699392K)] 47649K->34744K(1005056K), [Metaspace: 52953K->52953K(1097728K)], 0.1254259 secs] [Times: user=0.21 sys=0.01, real=0.13 secs]

项目频繁的GC,一方面Metaspace设置的-XX:MaxMetaspaceSize=500m太小,Metaspace的大小和加载类的数据有关系,加载的类越多metaspace占用的内存也就越大。通过修改JVM的-XX:SoftRefLRUPolicyMSPerMB值来解决metaspace上升问题。

参考:https://zhuanlan.zhihu.com/p/125503076

另一方面System.gc()

这个需要注意的是,这个明显的是程序中显式的调用gc才会引发垃圾回收,但是不好定位到底是哪个程序,这时候就需要打印出jvm的dump文件了,使用jstack pid 查出来服务崩溃前的线程堆栈。

2020-08-27 19:59:15.341  INFO 21209 --- [nio-8263-exec-7] c.o.f.g.f.controller.GateWayController   : ===HZ Upload File Size=500065,File Name=file
2020-08-27 19:59:15.342  INFO 21209 --- [nio-8263-exec-7] c.o.f.g.f.controller.GateWayController   : ===HZ Upload File Size=443810,File Name=file
2020-08-27 19:59:16.260  INFO 21209 --- [       Thread-7] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-08-27 19:59:20.801  WARN 21209 --- [nio-8263-exec-7] s.w.m.s.StandardServletMultipartResolver : Failed to perform cleanup of multipart items

java.lang.NullPointerException: null

参照:https://www.jianshu.com/p/6a2f14067f50

https://www.cnblogs.com/cuizhiquan/p/11537678.html

https://blog.csdn.net/aorangtong0758/article/details/101112749

https://zhuanlan.zhihu.com/p/58851222

在此记录一下思路。

猜你喜欢

转载自blog.csdn.net/airyearth/article/details/108272981
今日推荐