首页 > 其他分享 >JVM系统优化实践(23):GC生产环境案例(6)

JVM系统优化实践(23):GC生产环境案例(6)

时间:2023-07-26 21:05:19浏览次数:41  
标签:系统优化 MAT 递归 23 ClassLoader GC JVM 日志

您好,这里是「码农镖局」51CTO博客,欢迎您来,欢迎您再来~




在互联网大厂中,对每天亿级流量的日志进行清洗、整理是非常常见的工作。在某个系统中,需要对用户的访问日志做脱敏处理,也就是清洗掉姓名、身份证号、手机号等个人隐私信息后在保存到数据库中或者交付给其他应用使用。

系统的设计者是直接从kafka中获得的日志数据,再交由清洗系统进行处理。结构图是在这样的:

JVM系统优化实践(23):GC生产环境案例(6)_GC


一段时间后,发现系统运行越来越慢,还出现了卡顿现象。经过调取GC日志文件后发现,业务代码中出现了大量的递归操作。于是又通过MAT工具分析OOM快照,定位递归代码产生的地方。最终,得出的结论是:递归调用次数并不是很多,几十次而已,完全在合理范围内。但递归所创建的总的char[]数组大小1G左右。由此可知,并不一定全是代码问题。继续顺着问题往下查,通过排查JVM参数的设置,发现JVM的堆内存设置过小,仅有1G,而且年轻代内存也过小。这才导致系统频繁卡顿,原来是在不停地执行GC。

JVM系统优化实践(23):GC生产环境案例(6)_GC_02


所以,解决方案就非常明确了。


该系统部署在Tomcat中。解决了年轻代的问题没过多久,又出现了经常假死,但过一会又能正常访问。这就有点让人费解了。起初以为是硬件资源不足,所以使用top命令检查机器资源使用情况。针对机器配置(4C8G)和资源状况(1%CPU和50%+RAM)对系统问题进行初步排查定位。然后用通过jstat分析,没有发现新的OOM和异常的GC。通过导出内存快照,使用MAT进行分析,最终发现有太多的ClassLoader,而且每个ClassLoader都加载了大量的byte[]数组。原来,为了在系统启动时就做一些业务上的干预,开发工程师对ClassLoader做了一些自定义的修改而没有顾忌对性能的消耗。因此,解决方案也非常简单:

1、修改自定义ClassLoader的加载方式;

2、限制ClassLoader的创建数量。

再来稍微回顾一下:

GC问题定位一般会采取:

1、分析GC日志;

2、使用jstat工具;

3、使用jmap工具。

而OOM问题的分析解决,则一般会采取:

1、线上系统监控;

2、用MAT工具。

这两种方法来解决。




感谢您的大驾光临!欢迎骚扰,不胜荣幸~

标签:系统优化,MAT,递归,23,ClassLoader,GC,JVM,日志
From: https://blog.51cto.com/u_15817148/6859516

相关文章

  • noi2023 游记
    ?~7.1学考。7.2晚上打了把arc。F原题过了。找了一整场E的规律,最后找出来一个奇怪的东西/oh。7.3联考是我的模拟赛。去武汉。7.4早上模拟赛t1跑两次km没清空,t3没写完。晚上感觉很困,想先去开场div2练练手。先打开了个div2的f,看了会儿突然发现怎么d2F=d1D!!于......
  • TextMeshPro2.1.6GC优化
    地址:https://github.com/YingMei7531/TextMeshPro2.1.6-GCOptimize参考这个项目进行的TMP优化,简单说就是用对象池降低了GC消耗。原项目是1.4.1,这里做了小修改换成了2.1.6。......
  • ICCV 2023 | PVT++:通用的端对端预测性跟踪框架
    前言 本文提出通用的端对端预测性跟踪框架PVT++,旨在解决目标跟踪的部署时的延迟问题。多种预训练跟踪器在PVT++框架下训练后“在线”跟踪效果大幅提高,某些情况下甚至取得了与“离线”设定相当的效果。本文转载自PaperWeekly作者|Jaraxxus仅用于学术分享,若侵权请联系删除......
  • 杭电多校2023 第三场
    1005直接dp即可#include<bits/stdc++.h>usingnamespacestd;intdp[5005][5005];intN;inta[5005];constintMOD=1e9+7;intmain(){intT;cin>>T;while(T--){intN;memset(dp,0,sizeof(dp));dp[1][1]=......
  • 2023牛客多校7.24补题
    J-FineLogic题意:给定n个点和m对偏序关系(x,y),构造最少的排列数目k,使得在这k个排列中至少有一个排列满足x出现在y的前面。分析:很考验思维的一道题,首先如果m对偏序关系不构成环,也就是一张有向无环图,于是用拓扑排序构造出一个合理排列即可。要是有环,就直接构造两个排列,一个是1<2<.......
  • 2023 暑假集训模拟赛 Day 3
    比赛题目共\(2\)套,其中初赛题\(1\)套,复赛\(2\)题。比赛时间:\(10:50-12:00a.m\)。Part0x01过程-Process\(8:30\,a.m.\)做初赛题目;\(10:40\,a.m.\)拿到题目;\(10:41\,a.m.\)先写\(\text{T1}\),发现有点像分类讨论;\(10:50\,a.m.\)发现\(\text{T1}\)不需要那......
  • 2023.7.26 周三:instanceof
    1/*2instancof判断两个类之间是否有继承关系3Object->String4Object->Person->Teacher5Object->Person->Student6*/7Objects1=newStudent();8System.out.println(s1instanceofObject);//True9System.out.println(s1instanceofPerson);//T......
  • 23暑假友谊赛No.2
    23暑假友谊赛No.2A-雨_23暑假友谊赛No.2(nowcoder.com)#include<bits/stdc++.h>usingnamespacestd;signedmain(){ios::sync_with_stdio(false);cin.tie(nullptr);inta,b,c,d,x;cin>>a>>b>>c>>d>>x;cout......
  • 23暑假友谊赛No.2
    A-雨#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){vector<int>a(4);intx;for(auto&i:a)cin>>i;cin>>x;for(autoi:a)cout<<max(x......
  • 23暑假友谊赛No.2
    23暑假友谊赛No.2雨#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128typedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;constintN=50+5,INF=0x3f3f3f3f,Mod=1......