网易首页 > 网易号 > 正文 申请入驻

etcd 内存暴涨 10GB 的原因分析:Raft Log 与 B-tree 索引的内存开销

0
分享至

为什么绕不开 etcd内存到底被谁吃了我们踩的到底是哪个坑解决方案其实很简单用 etcd 的几条实操建议

前几天有个朋友跟我吐槽,说他们网关服务跑着跑着内存飙到 10GB+,还死活降不下来。查了一圈,锅全在 etcd 身上。今天就把这个坑拆开讲讲,顺便把 etcd 那些吃内存的设计一次说清楚,免得你以后踩同样的雷。

先说说背景。任何分布式系统,都得有个强一致性的组件来选主、同步配置。比如 Kubernetes 靠 etcd 组集群,Kafka 早期靠 Zookeeper,后来干脆内置了选主算法把它甩掉了。etcd 是 Go 社区的主力,也是 K8s 的关键组件,基本绕不开。

我们做的 API 网关 Easegress,一开始用 gossip 协议同步状态,后来发现太复杂、太难调试,三年前换成了内嵌版 etcd,把所有配置、统计监控数据、用户自定义数据全塞进去。数据量其实不大,感觉连 10MB 都不到——但内存就是莫名其妙涨到了 10GB,你说气不气人。

把 etcd 的设计翻了一遍之后,发现它至少有四个吃内存的地方,而且个个都是"为了性能"的设计。

第一个,也是最狠的:Raft Log。etcd 用 Raft Log 帮 follower 同步数据,但这玩意儿不是落盘的,是常驻内存的,而且硬编码至少保留 5000 条最新请求。你想想,如果 key 很大,比如一个 key 有 1MB,不断更新它,5000 条 Log 就是 5000MB,5GB 就这么没了。这个 5000 还是写死的,改不了。

第二个,B-tree 索引。etcd 每一对 key-value 都会在内存里建一个 B-tree 索引,跟 key 的长度、历史版本数量都有关系,key 越大、版本越多,内存越肥。

第三个,mmap。etcd 用 mmap 做文件映射,把底层 boltdb 直接映射到虚拟内存里,db 文件越大,内存占用越大。

第四个,Watcher。watch 多、连接数多,内存也会往上堆。

回到 Easegress 的场景:用户配了上千条 pipeline,每条 pipeline 都要统计 M1、M5、P99 这些指标,统计信息大概 1-2KB。我们把这些统计数据合并写到一个 key 里,一千多条合并完,这个 key 平均 2MB。

然后问题就来了:2MB 的 key × 5000 条 Raft Log = 10GB 内存。之前 pipeline 少没暴露,这次上千条直接爆了。

没动 etcd,改的是自己的写法:把大 key 拆成多个小 key 写。数据总量没变,但每条 Raft Log 从 2MB 降到 1KB,内存直接从 10GB 干到 500MB。

说白了,etcd 本身没泄漏,是我们往里面塞了大 value,踩中了它内存级 Raft Log 的设计。

第一,避免大尺寸的 key 和 value,这是最要命的,Raft Log 和 B-tree 索引都会因此爆炸。

第二,控制 db 体积,定期做 compact 和 defrag,压缩加碎片整理,能降内存。

第三,别开太多 Watch,Watch 客户端和连接数都是内存大户。

第四,能用新版本就用新版本。比如 Go 1.12 用的 MADV_FREE 内存回收,进程标记释放但 RSS 不降,看着像泄漏;Go 1.16 改成 MADV_DONTNEED 立刻回收就好了。etcd 3.4 还是用 1.12 编译的,这种坑防不胜防。

你在项目里遇到过 etcd 内存飙升吗?是怎么定位解决的?评论区聊聊,说不定你的经验能救一个正在加班的人。

声明:内容由AI生成

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
第五次大放水,但别指望楼市暴涨

第五次大放水,但别指望楼市暴涨

大川东山再起
2026-09-07 10:42:11
美司令与中方会晤达成共识,F16送台半路掉头,台当局7年白等?

美司令与中方会晤达成共识,F16送台半路掉头,台当局7年白等?

历史点行
2026-09-08 15:21:50
听听恒大前员工心里话:真实的许家印,和你想的完全不一样

听听恒大前员工心里话:真实的许家印,和你想的完全不一样

花小猫的美食日常
2026-08-23 05:03:59
100多年前就淘汰的波子汽水瓶,为什么日本还在用?

100多年前就淘汰的波子汽水瓶,为什么日本还在用?

日本通
2026-09-07 15:11:59
郭德纲被处罚!网友建议解散德云社、鼓曲社,无人敢批后续演出

郭德纲被处罚!网友建议解散德云社、鼓曲社,无人敢批后续演出

蜜桔娱乐
2026-09-07 20:20:31
万亿资产归零,全国第四大保险集团破产,1.5万亿保单怎么样了?

万亿资产归零,全国第四大保险集团破产,1.5万亿保单怎么样了?

米果说识
2026-08-17 19:17:49
小米再次背水一战

小米再次背水一战

全天候科技
2026-09-08 00:47:41
别不信!央国企裁员,最先安全的不是95后,是45岁这批“老油条”

别不信!央国企裁员,最先安全的不是95后,是45岁这批“老油条”

职场资深秘书
2026-09-06 13:03:41
张柏芝落地青岛,公开第二个家,三胎生父谣言终结,锋菲再度示爱

张柏芝落地青岛,公开第二个家,三胎生父谣言终结,锋菲再度示爱

人间无味啊
2026-08-23 05:14:23
香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

健康科普365
2026-07-10 20:25:03
马筱梅这回彻底开眼了,见识了什么叫天差地别,跟着汪小菲连教室都进不去

马筱梅这回彻底开眼了,见识了什么叫天差地别,跟着汪小菲连教室都进不去

阿废冷眼观察所
2026-09-08 08:39:34
福建仙游一栋三层民房倒塌,50多岁房主夫妻骑摩托车回家查看遇车祸,2人均受伤,该房去年才花三十多万装修,村民:村里正为其组织捐款

福建仙游一栋三层民房倒塌,50多岁房主夫妻骑摩托车回家查看遇车祸,2人均受伤,该房去年才花三十多万装修,村民:村里正为其组织捐款

大风新闻
2026-09-08 11:54:09
巨亏近100亿,高瓴割肉跑了

巨亏近100亿,高瓴割肉跑了

投资家
2026-09-01 20:45:25
撞见亲戚的秘密,到底有多窒息?成年人的体面,全靠假装不知道

撞见亲戚的秘密,到底有多窒息?成年人的体面,全靠假装不知道

夜深爱杂谈
2026-09-07 21:28:15
郭德纲歪曲篡改抗战歌曲《弹起我心爱的土琵琶》,官方发布处理通报

郭德纲歪曲篡改抗战歌曲《弹起我心爱的土琵琶》,官方发布处理通报

观察者网
2026-09-07 18:03:38
“好吓人,全是碳水饼子”,小学男生吃饭火了,网友:快戒面条吧

“好吓人,全是碳水饼子”,小学男生吃饭火了,网友:快戒面条吧

世界圈
2026-09-08 15:38:25
老将复苏!33岁皇马旧将彻底崛起!西甲4轮狂揽3球3助

老将复苏!33岁皇马旧将彻底崛起!西甲4轮狂揽3球3助

有态度网友19HJkf
2026-09-08 13:07:12
汤家凤教授别只盯着英语啊,数学的主科地位也一起取消呗

汤家凤教授别只盯着英语啊,数学的主科地位也一起取消呗

神不隆通
2026-09-06 10:50:39
寿命长不长,头发先知?医学发现:60岁后,白发少的人活得更久?

寿命长不长,头发先知?医学发现:60岁后,白发少的人活得更久?

周哥一影视
2026-08-30 15:19:42
放下巨星架子!詹姆斯让队友放开抡,直言自己得分难过15分

放下巨星架子!詹姆斯让队友放开抡,直言自己得分难过15分

福娃谈体育
2026-09-07 16:44:34
2026-09-08 16:56:49
千纸鹤安安
千纸鹤安安
大自然的搬运工
112文章数 3关注度
往期回顾 全部

科技要闻

小米再次背水一战

头条要闻

外媒炒作中国"人形机器人参战" 称机器人部队即将成军

头条要闻

外媒炒作中国"人形机器人参战" 称机器人部队即将成军

体育要闻

韩旭:我一定会再次走出去

娱乐要闻

郭德纲被处罚,郭麒麟被曝恋情瓜

财经要闻

全球黄金“回家”

汽车要闻

领克20 领克的纯电小钢炮这次更运动了

态度原创

家居
艺术
本地
数码
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

艺术要闻

597米!中国第三、世界第六高楼,新效果图曝光!

本地新闻

宁波,中国制造的隐藏大佬

数码要闻

英伟达被曝将推出搭载GB203 GPU的GeForce RTX 5070显卡

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版