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

2023年 7月 17日 62.7k 0

您好,这里是「码农镖局」掘金小站,欢迎您来,欢迎您再来~

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

高并发场景OOM01.png

高并发场景OOM02.png
 

高并发场景OOM03.png

高并发场景OOM04.png

高并发场景OOM05.png

高并发场景OOM06.png

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

然后输入如下代码:

代码01.png

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

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

代码如下:

代码02.png

 

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

代码如下:

代码03.png

 

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

数据处理架构.png

 

这里面的系统隐患是:

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

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

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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论