当前位置: 首页 > 后端技术 > Python

记一次线上fullgc问题处理

时间:2023-03-25 22:30:57 Python

问题现象[root@2wkvx/]#jstat-gc12000S0CS1CS0US1UECEUOCOUMCMUCCSCCCSUYGCYGCTFGCFGCTGCT465408.0465920.00.00.0446464.0446464.02796544.02796531.9109388.0104798.112364.011638.81814.5084129914.951919.459465408.0465920.00.00.0446464.0446464.02796544.02796536.4109388.0104798.112364.011638.81814.5084139916.811921.318465408.0465920.00.00.0446464.0446464.02796544.02796542.0109388.0104798.112364.011638.81814.5084150918.822923.330465408.0465920.00.00.0446464.0446464.02796544.02796541.4109388.0104798.112364.011638.81814.5084160920.780925.287465408.0465920.00.00.0446464.0446464.02796544.02796543.5109388.0104798.112364.011638.81814.5084171922.759927.267465408.0465920.00.00.0446464.0446464.02796544.02796544.0109388.0104798.112364.011638.81814.5084182924.802929.310465408.0465920.00.00.0446464.0446464.02796544.02796544.0109388.0104798.112364.011638.81814.5084193926.755931.263465408.0465920.00.00.0446464.0446464.02796544.02796544.0109388.0104798.112364.011638.81814.5084204928.730933.238465408.0465920.00.00.0446464.0446455.52796544.02796542.0109388.0104798.112364.011638.81814.5084215930.797935.304465408.0465920.00.00.0446464.0446464.02796544.02796544.0109388.0104798.112364.011638.81814.5084222932.032936.540465408.0465920.00.00.0446464.0446464.02796544.02796521.6109388.0104798.512364.011638.81814.5084230934.761939.269*S0C:第一个survivor区大小*S1C:第二个survivor区大小*S0U:第一个survivor区已用大小*S1U:第二个survivor区已用大小*EC:EdenareaSize*EU:Eden区使用的大小*OC:老年代的大小*OU:老年代使用的大小*MC:方法区的大小*MU:方法区使用的大小*CCSC:压缩空间大小*CCSU:压缩空间使用*YGC:年轻代垃圾收集次数*YGCT:年轻代垃圾收集时间*FGC:老年代垃圾收集次数*FGCT:老年代垃圾收集时间*GCT:总耗时垃圾回收[root@kuai-websocket-77b9dc5dbf-8z5mp/]#jinfo1VMFlags:Non-defaultVMflags:-XX:CICompilerCount=15-XX:InitialHeapSize=1073741824-XX:MaxHeapSize=4294967296-XX:MaxNewSize=1431306240-XX:MinHeapDeltaBytes=524288-XX:NewSize=357564416-XX:OldSize=716177408-XX:+UseCompressedClassPointers-XX:+UseCompressedOops-XX:+UseFastUnorderedTimeStamps-XX:+UseParallelGC命令行:-Xms1024m-Xmx4096-server[root@757799875b-2wkvx/]#jmap-heap1AttachingtoprocessID1,pleasewait...调试器附加成功。检测到服务器编译器。JVM版本为25.181-b13使用线程本地对象分配。具有33个线程的并行GC堆配置:MinHeapFreeRatio=0MaxHeapFreeRatio=100MaxHeapSize=4294967296(4096.0MB)NewSize=357564416(341.0MB)MaxNewSize=1431306240(1365.0MB)OldSize=716177408(683.0MB)newratio=2soverivorratio=8metAspacesize=21807104(20.796875MB:容量=457179136(436.0MB)使用=457179136(436.0MB)免费=0(0.0MB)100.0%使用空间:容量=476577792(454.5MB)使用=0(0.0MB)免费=476577792(454.5MB)0.0%usedToSpace:capacity=477102080(455.0MB)used=0(0.0MB)free=477102080(455.0MB)0.0%usedPSOldGenerationcapacity=2863661056(2731.0MB)used=2861965360(2729.382858276367MB??)free=96(276317MB)61.6171417236328125MB)99.94078572963629%使用[root@kuai-server-757799875b-slmzd/]#jmap-histo:live1|grepWsFrameServer175:20222624org.apache.tomcat.websocket.server.WsFrameServer[root@kuai-server-757799875b-slmzd/]#jmap-dump:live,format=b,file=dump.hprof1复制代码分析dump文件:ViewinHistogram对WsFrameServer的引用对象总大小为3.1GShallowHeap表示对象本身占用的内存大小,不包括对其他对象的引用,即对象头加上成员变量的总和(不是值ofmembervariables)RetainedHeap是对象本身的ShallowHeap,加上可以从对象直接或间接访问的ShallowHeaps的总和。换句话说,RetainedHeap就是对象GC后可以回收的内存总和。FindtheunreleasedexternalreferencesofGCRootofWsFrameServerPathstoGCRoots->excludeallphantom/weak/softetc.reference(excludeallweakandsoftreferences)-FindGCRootthreads->找到未释放内存最高的代码逻辑段usage(很可能会产生内存溢出代码)过滤并查看InstanceMonitorHandler的大小来查看WsFrameServer的内存使用情况。里面会有两个对象,一个messageBufferText和一个messageBufferBinary,一个10M和一个5M的代码诊断:spring-websocket.xml配置缓冲区大小:复制代码b.页面关闭时,websocket连接并没有关闭,导致连接数不断增加参考:《2020最新Java基础精讲视频教程和学习路线!》链接:https://juejin.cn/post/693504...