Elasticsearch案例分析(一):Bulk异常导致Elasticsearch内存泄漏

本文介绍了Elasticsearch集群因批量导入数据引发的严重内存泄漏问题,详细解析了问题根源在于bulk线程引用log4j的ParameterizedMessage对象导致BulkShardRequest无法回收。通过分析Elasticsearch和log4j源码,发现6.4版本已由log4j修复此bug。解决方法是在Elasticsearch的JVM配置文件中禁用thread local。
摘要由CSDN通过智能技术生成

这周三线上股票板块的Elasticsearch集群发生了很严重的内存泄漏,本身数据量不大的一个集群,占用内存却非常的高,甚至内存占用已经超过了数据总量。最终是通过临时重启解决问题。

虽然重启释放掉了内存空间,但问题原因没找到,就意味着还有可能发生。由于这是一个新搭建不久的集群,也是本人迷之自信,直接上6.3.0。就我目前对Elasticsearch的了解和解决方案,各种招数都试了,还是没能找到原因。所以对版本产生了怀疑。因为当时运行了很久稳定的5.3版本集群并没有出现这种情况。最后证明跟版本无关。

后来在网上找到wood大叔(携程吴晓刚)写的博客。

参考:https://www.jianshu.com/p/d4f7a6d58008

看了之后如梦初醒,惊人的相似。竟然复现了这个问题,并且直到6.3版本仍然有这个bug。

说一下我们的使用场景:

  • 主要是搜索股票相关数据,包括行情数据、财务数据、新闻数据等等
  • 数据来源不同,有些是同事爬取的,有些是合作推送,有些则是直接购买(如:聚源)
  • 有些数据实时进Elasticsearch,有些数据则是批量导入,每天导入一次

我们这之所以会内存泄漏,就是因为每天一次的这个批量导入。而且事实是另外的5.3版本之所以没有出现这个问题,是那个集群完全是实时,没有bulk操作。

批量导入后,log4j日志报错,log4j使用的是thread local,首先是bulk线程引用了log4j的ParameterizedMessage对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值