强如 Disruptor 也发生内存溢出?

  • 时间:
  • 浏览:2
  • 来源:5分3DAPP下载_5分3DAPP官网



有时候 在消费 Kafka 那里 Mock 为有五个多 while 循环总爱 不断的生成数据。

原应 分析生产上的内存 dump 文件非常大,达到了几十G。也是原应 分析让我们都的内存设置越多有关。

再次 review 代码发现:从 Kafka 里取出的 700 条数据是直接往 Disruptor 里丢的。

有时候 让我们都便想与非 还还还可否 在本地复现,前一天就要好定位的多。

前言

没法复现大问题就很难定位了。于是让我们都 review 代码,发现生产的逻辑和让我们都用 while 循环 Mock 数据还不太一样。

也会让大每项人太好 JVM 前一天的黑盒难以下手的同学有有五个多直观的感受。

一块儿也得感叹 Disruptor 东西虽好,全都我能乱用哦!

我也做了有五个多实验,证明人太好没法。

结果发现 com.lmax.disruptor.RingBuffer 类型的对象占用了将近 400% 的内存。

你以为都没法意外只跑了一分多钟内存就顶不住了,观察左图发现 GC 的频次非常高,有时候 内存的回收却是相形见拙。

从目前的表现来看全都我内存含高全都对象总爱 居于强引用关系原应 得不还还还可否 回收。

于是查想看 生产上 Disruptor 的 RingBuffer 配置,结果是:1024*1024



结合 jstat 的日志发现就与非 居于了 FGC 老年代也原应 分析回收不了,内存原应 分析到顶。

前一天大问题就找到了,不过生产上你你这个 值具体设置几只还得根据业务情況测试还还可否 知道,但原有的 1024*1024 是绝对不还还还可否 再使用了。

总结

一块儿当应用启动前一天利用 VisualVM 连上应用实时监控内存、GC 的使用情況。





跑了 20 几分钟系统一切正常,每当一次 GC 都能回收大每项内存,最终呈现锯齿状。

定位

为了尽原应 分析的模拟生产情況便在服务器上跑着有五个多生产者系统应用应用程序,总爱 源源不断的向 Kafka 中发送数据。

模拟的前一天是有五个多对象中放队列里,而生产的情況是 700 条数据中放队列里。你你这个 数据量是 700 倍的差距。

一块儿后台也时候开始打印内存溢出了,前一天便复现出大问题。

排查

这说明应用的内存使用肯定是有大问题的,有全都赖皮对象始终回收不掉。

相关演示代码查看:

全都在生产上假设让我们都的队列大小是 1024,没法随着系统的运行最终肯定会原应 1024 个位置上装满了对象,有时候 每个位置是 700 个!

我设置队列大小为 8 ,从 0~9 往里边写 10 条数据,当写到 8 的前一天就会把前一天 0 的位置覆盖掉,里边的以此类推(之类于 HashMap 的取模定位)。

为了验证与非 你你这个 大问题,我在本地将该值换为 2 ,有五个多最小值试试。

主要从表现-->排查-->定位-->防止 五个步骤来分析和防止大问题。

于是便想看 想看 底是那此对象占用了没法多的内存,利用 VisualVM 的 HeapDump 功还里还还可否 立即 dump 出当前应用的内存情況。

同样的 128M 内存,也是通过 Kafka 总爱 源源不断的取出数据。通过监控如下:

原文发布时间为:2018-08-29

结果跑了 10 几分钟内存使用并没法那此大问题。根据图中还还还可否 看出,每产生一次 GC 内存都能有效的回收,全都前一天并没法复现大问题。

于是让我们都想根据运维前一天分发到的内存数据、GC 日志尝试判断哪里再次出现大问题。

https://github.com/crossoverJie/JCSprout/tree/master/src/main/java/com/crossoverjie/disruptor

该系统应用应用程序的业务逻辑非常简单,全都我从 Kafka 中将数据消费下来有时候 批量的做持久化操作。

这里也就能说明为那此第一次模拟数据没复现大问题了。

全都原应 想使用 MAT 分析需最少大量时间。

最近让我们都生产上的有五个多应用不断的爆出内存溢出,有时候 随着业务量的增长再次出现的频次没法高。





防止

OutOfMemoryError 大问题相信全都让我们都都遇到过,相对于常见的业务异常(数组越界、空指针等)来说之类大问题是很难定位和防止的。

你你这个 数量级就非常吓人了。

查看生产的日志发现每次从 Kafka 中取出的后要几百条数据,而让我们都 Mock 时每次不还还还可否 产生一根

而大问题则是随着 Kafka 的消息越多,再次出现的异常的频次就更慢。原应 分析当时还有全都工作全都不还还还可否 让运维做重启,有时候 监控好堆内存以及 GC 情況。

本文以最近碰到的一次线上内存溢出的定位、防止大问题的土办法展开;希望能对碰到之类大问题的同学带来思路和帮助。

人太好到了最后也就改了一行代码(还没改,直接修改配置),但这排查过程我人太好是有意义的。

为了尽快的复现大问题,我将本地应用最大堆内存设置为 400M。

重启大法虽好,前一天依然不还还还可否 根本防止大问题。



想看 你你这个 包自然就想到了 Disruptor 环形队列。

表象

甚至有几台应用 FGC 达到了上百次,时间也高的可怕。

结果发现老年代的内存使用就与非 居于 GC 也总爱 居高不下,有时候 随着时间推移也没法高。

而 Disruptor 作为有五个多环形队列,再对象没法被覆盖前一天是总爱 居于的。

猜你喜欢

2017年上半年,创业投资领域有什么明显的趋势

动漫的很快发展为动漫衍生品创造了无限的市场空间,换成国家政策对动漫的扶持,未来的动漫行业必将创造新的经济的神话。动漫店不仅有新奇实用的动漫互近产品,还有时尚个性的动漫DIY创意

2020-03-22

性价比最高的千元手机是哪一款

推荐华为畅享9全网通标配版3GB+32GB,华为商城在售价格999元,手机产品属于快消电子产品,华为商城的电子产品价格也是会随着市场情况而有一定的调价优惠,最终以华为商城页面价

2020-03-22

ye6fqlcefaxa2的主页

TA还没法发布过内容~暂无文章:990丨粉丝:4405丨话题:0云栖直播暂未提供你关注的阿里云!文章:416丨粉丝:5222丨话题:7

2020-03-22

2019年上市的所有手机都有什么型号

展开完整性为你推荐:有点硬推荐你对你是什么回答的评价是?你对你是什么回答的评价是?楼主你好,2019年上市的手机太大了哦,比如华为p200系列,vivox27,opporeno

2020-03-21

中国20大手机品牌排行榜。(销量)

您要能登录华为商城官网查看手机更多信息。1、屏幕:屏幕尺寸为6.53英寸,屏幕色彩为1670万色,分辨率为FHD+103000x2244像素,屏占比为88.07%,高清大屏,玩

2020-03-21