ElasticS未合

极客

** 哎呀,ElasticS未合这档子事儿,可真让我挠头!


哎,兄弟们,姐妹们,今天咱不聊别的,就聊聊我这两天差点儿没被逼疯的一个技术坑——ElasticS未合

你们听到这词儿啥感觉?是不是跟我一开始一样,一脸懵圈?乍一看还以为是哪个新出的开源框架呢,结果一查,好家伙,原来是Elasticsearch的segment(段)合并没及时完成啊!说实话,刚搞明白那会儿,我真是又气又想笑,这名字谁起的,也太能省事儿了吧,直接谐音梗扣钱啊!

话说回来,这事儿可真不是闹着玩的,我这边线上有个日志系统,跑得好好的,突然有一天,发现查询响应慢得跟蜗牛似的,我心说不对啊,服务器配置虽然不算顶级,但也不至于这么拉胯吧?赶紧上Kibana一看监控数据,好家伙,堆内存使用率飙得老高,GC(垃圾回收)频率大得吓人,而且磁盘I/O一直在高位盘旋,感觉硬盘都快转出火星子来了。

当时我那个急啊,就跟热锅上的蚂蚁似的,第一反应就是:完犊子,是不是索引分片设置错了?或者是查询语句写得太烂了?结果排查了一圈儿,各种优化手段都试了个遍,P用没有,还是我一个老前辈点醒了我:“你丫的,检查检查ElasticS未合的情况啊!”

哎哟我去,一语惊醒梦中人!

我赶紧执行了那个什么_forcemerge接口的查看命令,结果不看不知道,一看吓一跳,好家伙,那索引底下躺着几百个小的segment文件,就像一堆碎纸屑堆在那里,还没被整理成大文件,这玩意儿在Lucene(Elasticsearch底层的搜索引擎库)里,每个segment都是一份独立的存储,查询的时候得挨个儿去扫,能不慢吗?这就像你去图书馆借书,结果图书管理员告诉你,这本书被拆成了几百份手稿,散落在各个角落,你得自己一张张找回来拼起来看,我去,这谁受得了啊!

ElasticS未合的后果,那真不是盖的,除了查询变慢,最要命的是它占着内存啊!因为Elasticsearch为了快速访问,会把一些segment的元数据信息缓存到堆内存里,小segment一多,缓存占用就大,内存不够用,就开始频繁GC,然后CPU飙高,整个集群就跟得了帕金森一样,抖个不停,真的,那会儿我盯着屏幕上像过山车一样的心跳监控曲线,心都凉了半截,默默念叨着:“大哥,你可千万别在这时候挂了啊……”

后来,我当然是赶紧手动触发了一次强制合并(_forcemerge),把那些小segment都给合到一起,乖乖,那感觉就像是给房间做了一次彻彻底底的大扫除,把积攒多年的杂物全部清空,瞬间通透明亮!合并完之后,你再去看查询速度,那简直是肉眼可见地提升,堆内存使用率也降下来了,GC也不那么频繁了,感觉整个集群都长舒了一口气,我这悬着的心才算踏实下来。

所以说,兄弟们,如果你们也遇到ES性能无端下降的情况,别总把锅甩给查询语句或者服务器配置,那可能压根儿就是ElasticS未合在背地里搞鬼呢!这玩意儿就像人的血管,时不时得清理一下,把血脂血糖降下来,保持通畅才健康嘛,对吧?尤其是那些写入频繁、更新删除多的索引,更是要留意segment的合并情况,不然等你发现它的时候,它绝对能给你上演一出“我发起疯来我自己都怕”的大戏。

唉,说到底,还是我大意了,没早点设置好索引策略,让这些小东西肆无忌惮地疯长,吃了这次亏,我可是记住了,以后得勤看着点儿,该定期合并就定期合并,该调参数就调参数,绝不给这些“小妖精”再兴风作浪的机会!好了,今天这吐苦水加经验分享就到这儿吧,希望各位别重蹈我的覆辙哈!


(底部广告位)

ElasticS未合

想学习网络安全,深入理解Elasticsearch等技术的底层原理吗? 加QQ:1234567890,咱们一起探讨交流,少走弯路!

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码