尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
内存越用越大,甚至 OOM?TDengine 的内存到底花在哪儿
服务器内存一直涨,过几天就被 OOM Killer 干掉是不少用户在压测或生产上线初期会遇到的问题。这篇文章按 TDengine 实际的内存消费结构,把常见的几块内存去了哪儿讲清楚,并给出排查和调优方向。相关配置项名称和默认值均对照源码核实过。每个 vgroup 都会占一份写入缓冲区建库时的BUFFER参数(单位 MB,取值范围 3~16384,默认 256)决定了每个 vgroup 用于承接写入数据的内存缓冲池大小。这里最容易被忽视的一点是:这块内存是按 vgroup 计算的,一个 dnode 上如果承载了多个数据库、每个数据库又有多个 vgroup 副本,实际占用是BUFFER × vgroup 数量叠加起来的。如果你在同一台机器上开了很多个库、每个库又给了较大的BUFFER,内存涨得比预期快,基本就是这个原因。建议:排查内存占用时,先用SHOW VGROUPS之类的命令数一下这台机器上实际承载了多少 vgroup 副本,再乘以各个库的BUFFER设置,看看理论占用和实际观察到的内存增长是否吻合。CACHESIZE只在开启缓存最新值功能时才有意义建库参数里的CACHESIZE(对应底层的 cacheLastSize,默认 1MB,范围 1~65536MB)是给缓存最后一行/最后一个值这个功能用的一个基于 RocksDB 的内存块缓存(block cache)。如果你的业务大量查询设备的最新状态(LAST/LAST_ROW),这块缓存能明显提升查询速度,但代价是内存占用。需要注意的是,这个 RocksDB 缓存除了CACHESIZE控制的块缓存,还有几个默认值容易被忽略的相关参数:写缓冲区(默认 8MB × 2 个)、后台线程数(默认 2)、以及最大打开文件数默认是不限制。在文件数很多的场景下,不限制打开文件数是一个常见的内存放大来源(每个打开的文件都会带来额外的索引/过滤块内存开销),这是排查内存异常增长时容易被忽略的一环。建议:如果没有明确需要缓存最新值的查询场景,不必特意调大CACHESIZE;如果用到了这个功能且观察到内存异常增长,可以关注一下这部分 RocksDB 相关参数,而不是只盯着BUFFER。查询本身也会占内存,而且默认是不限制单次查询除了写入侧的内存,查询执行过程本身也会占用内存(排序、聚合中间结果等)。TDengine 有一个查询内存池机制,涉及几个关键配置:查询内存池的开关(是否让查询统一走内存池管理);单次查询的内存上限——默认值是 0,也就是不限制;一个最小保留内存的水位线,用来防止查询内存池把机器内存全部吃满,挤占操作系统和其他进程。这意味着如果没有主动配置单次查询的内存上限,一条写得不好的复杂查询(比如大范围聚合、超级表全表扫描后排序)理论上是可以把内存占用推得很高的。在多租户或者和其他服务混部的机器上,这一点尤其值得关注。建议:生产环境如果是多个业务共享同一套 TDengine,或者机器本身内存不算充裕,建议主动给单次查询设置一个合理的内存上限,而不是依赖默认的不限制。同时给操作系统预留出合理的内存水位,避免查询内存池把机器逼到临界值。小结排查 TDengine 内存问题时,建议按这个顺序看:先算清楚写入缓冲区(BUFFER× vgroup 数)是不是本身就设得偏大;再看是否开启了缓存最新值功能以及相关 RocksDB 参数是否有不合理的默认值(尤其是文件数不限制这一点);最后检查查询侧有没有对单次查询内存做限制——这三块加起来,基本能覆盖大部分内存异常增长的场景。
RELATED

相关推荐

一条命令自建Loom:Screendrop + Cloudflare R2云分享部署保姆级教程

一条命令自建Loom:Screendrop + Cloudflare R2云分享部署保姆级教程

一条命令自建Loom:Screendrop Cloudflare R2云分享部署保姆级教程 【免费下载链接】Screendrop A beautiful screenshot screen recording Loom alternative - all native, self hostable and free. 项目地址: https://gitcode.com/gh_mirrors/sc/Screendrop …

📅 2026/10/8 7:20:18
NEX系列PCB曝光机线性开关电路设计与制作(论文+源码)

NEX系列PCB曝光机线性开关电路设计与制作(论文+源码)

本设计对PCB曝光机线性开关电路设计的总体架构如图所示,系统采用STC89C52单片机作为控制器,通过两个四相步进电机执行X轴和Y轴目标控制,在使用时用户可以通过按键分别调节X轴和Y轴的转动,并通过LCD液晶显示当前的X轴和Y轴坐标。

📅 2026/10/8 7:20:18
质检第三版代码只保留图层与类型

质检第三版代码只保留图层与类型

优化后的完整 QCItemConfigForm.cs 四个改动点全部处理: 自适应缩放:主容器 TableLayoutPanel 全部 Dock=Fill,行高用百分比分配,CheckedListBox 在各自面板里 Dock=Fill,窗口拉大控件跟着大 去掉排除图层:公共区只剩「检查图层」+「实体类型」两块 图层控件占比加大:公…

📅 2026/10/8 7:20:18
MORE NEWS

更多资讯

📰

90DaysOfDevOps Day 83:Grafana 数据可视化实战——基于 kube-prometheus 与 Prometheus Operator 部署监控面板

文档/教程 【免费下载链接】90DaysOfDevOps This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Pri…

📰

学校心理咨询聊天室毕设源码:小程序+SSM+MySQL全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OpenRig:基于Node.js+tmux的本地化AI开发环境构建指南

1. 项目概述:OpenRig 是什么,它解决的到底是什么问题?OpenRig 这个名字乍一听像某种硬件矿机管理工具,或是开源的图形渲染集群调度器——但结合当前热词里高频出现的Node.js、tmux、Claude、Codex,再叠加“cc switch l…

📰

k3d cluster start 命令详解:在 Docker 中启动已存在 k3s 集群的完整指南

云原生容器编排 【免费下载链接】k3d Little helper to run CNCFs k3s in Docker 项目地址: https://gitcode.com/gh_mirrors/k3/k3d 点击查看 免费下载 k3d 是一个在 Docker 中运行 CNCF k3s 的轻量级辅助工具(Little helper to run CNCFs k3s in Dock…

📰

Superpowers技能库详解:让AI编程助手从自由发挥到流程可控

最近只要聊到 AI 辅助编程,就很难绕开 superpowers 这个词。我第一次看到的时候也愣了一下:这到底是个框架、一个插件,还是一套提示词?后来把仓库翻完、又在真实项目里跑了几轮,才确认它本质上是一套给 AI 助手用的技能…

📰

n8n实战指南:AI原生混合编程自动化平台核心能力与部署解析

1. n8n 项目概述:为什么说它是“AI 原生的混合编程自动化平台”做自动化工具这个领域,我前前后后接触了不少。早些年用的是 Zapier,后来换过 Make(当时还叫 Integromat),再往后自己折腾过 Huginn、Node-RED…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬