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

文章探讨了在高并发环境中,由于大量对象生成导致的YoungGC和FullGC频发,进而引发内存溢出问题。通过示例说明了Metaspace、JVM栈和堆如何配置及触发OOM,并提供了一个使用Kafka处理大数据量时可能出现的系统隐患案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您好,这里是码农镖局优快云博客,欢迎您来,欢迎您再来~


接昨天的问题继续来说,在高并发场景中,对象过多容易导致OOM。由于高并发导致Young GC存活对象过多,因此会有太多对象进入老年代,导致老年代也被填满,频繁触发Full GC,而老年代空间也很快被塞满。可以用图来表示:

 

 

 

 

 

因此,有限的内存中存放了过多的对象,而且大多数也都是存活的时候很容易发生OOM。而且系统本身的代码可能也存在着内存泄漏。例如,利用CGLIB动态生成类,来造成Metaspace的内存溢出。JVM的参数设置:-XX:MetaspaceSize=10M -XX:MaxMetaspaceSize=10M

然后输入如下代码:

 

运行代码后,通过jstat,会发现Metaspace数据异常。

再通过JVM栈溢出来实现OOM。JVM参数设置:-Xss1M

代码如下:

 

然后是JVM堆溢出来实现OOM。JVM参数设置:-Xms10M -Xmx10M

代码如下:

 

在一个试用kafka的超大数据量处理的案例中,架构大概是这个样子的:

 

这里面的系统隐患是:

1、一旦kafka故障,那么当前计算对应的数据必须全部驻留内存,并且一直重试等待kafka恢复;

2、计算没有停止的时候,会不停加载更多数据直到OOM。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值