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

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

时间:2023-07-14 23:32:44浏览次数:38  
标签:系统优化 OOM 18 发生 GC 内存 JVM main Metaspace

生产环境中,最常见的一种案例就是OOM,也叫「内存溢出」,它表示JVM已经无法支撑业务系统的运行。而很多工程师都没有类似处理线上系统故障的经验,尤其是这种突发的故障。那么:

1、为什么会OOM?(Why)

2、发生什么样的OOM?(What)

3、那个系统发生的OOM?(Who/Where)

4、什么时候发生的OOM?(When)

5、怎么排查和解决OOM?(How)

我们知道,启动一个Java系统,就是启动一个JVM进程。由这个JVM进程来决定如何执行Java代码,一个JVM进程只有一个执行入口:它总是从main方法开始的。

JVM启动后默认的main线程就是专门用于执行main方法的主线程。

1、Metaspace用于存放系统使用到的各种类信息和JDK自身的一些信息(可能发生OOM的地方);

2、每个线程都有自己的栈帧,用于存放各种局部变量(也可能发生OOM的地方);

3、另外,代码创建的各种对象,都会存放到堆内存里(也可能发生OOM的地方)。

所以,总结起来,OOM可能发生的地方包括:

1、Metaspace区

2、栈帧

3、堆内存

可以通过参数来设置Metaspace区的大小,防止产生OOM:

-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M

Metaspace区大小相对固定,很少出现大的浮动。Metaspace区满了也会触发Full GC,一旦Metaspace无法回收空间且还在不停加载更多数据,就会发生OOM。

Metaspace发生OOM的常见原因有:

1、新手工程师未设置Metaspace区的大小,而是直接使用的默认值;

2、使用的框架用到了cglib之类的技术通过反射动态生成很多附加类,导致Metaspace区被占满。

而栈帧发生OOM的常见原因有:

1、方法发生递归调用时,导致频繁入栈出栈;

2、即便是同一个方法,每一次调用都会产生一个入栈操作,调用完成后又会产生出栈操作。


标签:系统优化,OOM,18,发生,GC,内存,JVM,main,Metaspace
From: https://blog.51cto.com/u_15817148/6727683

相关文章

  • Atcoder Regular Contest 118 F - Growth Rate
    想到插值其实就挺套路的了吧……设\(dp_{i,j}\)表示有多少种方法确定\(a_i\sima_n\)使得\(a_i=j\)。那么有\(dp_{i,j}=\sum\limits_{k\geja_i}dp_{i+1,k}\)。边界条件是\(dp_{n+1,1\simm}=1\)。不难发现复杂度与值域有关,一眼过不去的样子。考虑优化,记\(lim_i\)满足......
  • Atcoder AGC062C Mex of Subset Sum
    对\(a_i\)从小到大进行排序,因为想到若\(<a_{i-1}\)的不能取到的数因为\(a_i>a_{i-1}\)肯定是能保证取不到的。对排完序的\(a_i\)做一个前缀和\(s_i=\sum\limits_{j=1}^n\),令\(A_i\)为\(a_{1\simi}\)中无法表示为子序列之和且\(<s_i\)的正整数的集合......
  • springcloud启动后读取不到nacos上启动文件
    问题:在确认nacos和jar包都启动成功后,却并没有读取到nacos配置中心的内容。解决:检查java项目的bootstrap.yml配置文件。spring:application:name:testmain:allow-bean-definition-overriding:truecloud:#配置中心config:server-add......
  • CF1844F Min Cost Permutation
    题面传送门先不考虑字典序的问题,只考虑最小值怎么求。先考虑一个特殊情况:\(c=0\),也就是说我想要相邻两项之差的绝对值最小。那么将其从小到大排序以后就满足要求。我们猜想实际上更一般的情况不会和这个差太多。不妨令\(c>0\),实际上最小值就在升序排列的时候取到。假设有四......
  • android gradle signingConfigs
    AndroidGradlesigningConfigs在Android开发中,签名是将应用程序与开发者进行关联的重要步骤。签名是一个数字证书,用于确保应用程序的完整性和真实性。Gradle是Android构建系统的一部分,可以通过Gradle配置文件来设置和管理应用程序的签名。SigningConfig对象在Gradle中,签名配置......
  • AE cc 2017 和 2018 中英文切换的方法
    AEcc2017中文切换英文的方法找到AE的安装文件目录下的“SupportFiles”文件夹,路径为C:\ProgramFiles\Adobe\AdobeAfterEffectsCC2017\SupportFiles进入“zdictionaries”文件夹,找到该文件夹里的中文语言文件:“zh_CN”,并打开改文件名,把“after_effects_zh-CN.dat”改成......
  • P1891 疯狂 LCM 题解
    一、题目描述:$T$ 组数据,每组数据给定$n$,求$\sum_{i=1}^{n}lcm(i,n)$数据范围:$1\leT\le3\times10^5,1\len\le1\times10^6$。 二、解题思路:个人觉得思维难度不大,只是要记住一个结论:$\sum_{d\midn}d=\frac{\varphi(n)\timesn}{2}$这个公式对......
  • 【AGC】云数据库开发常见问题汇总
    ​ 【问题背景】近期越来越多的开发者通过SDK使用云数据库,云数据库是一款支持端云数据协同管理、可扩展的Serverless数据库产品,提供简单易用的多平台原生SDK,您的应用可以通过SDK直接访问云侧数据库。同时,云数据库还支持通过ServerSDK直接管理云侧数据,实现云侧数据的高效管理。......
  • 【AGC】删除控制台应用重建报错url is null问题
    ​【关键字】AGC、agconnect-services.json、InvalidParameterException 【问题描述】有开发者反馈在删除了AppGalleryConnect中某个应用及其对应的项目,再重新创建相同的应用(包名一致),并且重新下载agconnect-services.json到项目中,应用会因为com.huawei.agconnect闪退。报错......
  • P5044 [IOI2018] meetings 会议 思考--zhengjun
    在NFLS模拟赛上遇到的,赛后订正过的。隔了蛮长时间的,总结一下。首先转化为笛卡尔树上后缀前缀的问题。然后考虑如何转移,发现转移形如\(f(x)=\min\{f(x)+C,kx+b\}\)的形式。可以直接线段树维护每个点的最优直线,在update的时候:如果\(f(x)+C\lekx+b\)恒成立(左右......