



























这是一个创建于 633 天前的主题,其中的信息可能已经有所发展或是发生改变。
小弟用 MongoDB 存储实时数据,都是传感器数据,十几个传感器,每秒都有数据发过来,需要实时存储,目前用了一个队列去一遍存一遍入库,集合都是分散开的,但是发现一个很严重的问题就是会把服务器的备用内存持续压榨,导致可用内存越来越小,用的 Window Server 服务器,192GB 只剩下十几 M ,可用内存,这个太夸张了,而且看进程 mongod.exe 这个进程占了 5 万多 MB ,很夸张,目前小弟也没有方法能立马排查出来,有大佬有过这个经验吗,请大佬指教一下。
2 pxllong 2024 年 9 月 19 日WiredTiger 这几个参数贴下 |
4 iamtuzi3333 2024 年 9 月 19 日@liprais 但是吃的太厉害了,影响其他项目运行了,现在很难受,我不知道怎么改好一点,虽然他确实很好用,在考虑要不要换其他数据库了 |
6 iamtuzi3333 2024 年 9 月 19 日@liprais 有道理,我申请一下多节点服务器,但是这个估计有点难,1 这个我限制了一半内存,明天看看是啥效果,谢谢大佬解答。 |
8 hiwind 2024 年 9 月 19 日你有多少传感器数据需要频繁查询的,可以考虑下冷热分离,冷数据换别的存储方式,定期任务进行冷热数据迁移 |
10 iamtuzi3333 2024 年 9 月 19 日@dejavuwind 不需要频繁查询,但是有时候需要翻查历史某一段时间的数据,我看过时序数据库,但是部分是单个时间单个数据,我的数据是{id:1,data:[1,2,3]}这种,有多个字段,data 是个浮点数数组,有时候会是 200 个数字。而且每个传感器一张表,时序数据库好像不太适合。热数据我都放在了 Redis 的队列中了。 |
11 iamtuzi3333 2024 年 9 月 19 日@pxllong 没法发图片,我打出来部分信息,每秒输出打印 10 条左右,有个 vsize 数据每条都是 6.49G , |
12 iamtuzi3333 2024 年 9 月 19 日@pxllong 复制了一条,大概就是这样 |
13 iamtuzi3333 2024 年 9 月 19 日目前项目我停掉了,占用太多了,估计 mongo 就是吃内存,这个似乎是他原本就这么设计的。 |
15 iamtuzi3333 2024 年 9 月 19 日@wheat0r 这个倒不会,同台服务器上面有个 sqlserver ,MySQL ,上面也是存了大量数据,但是未发现有这么吃内存,而且现在发现 mongo 太迟了,他的底层是内存映射( Memory-Mapped Files ) 来处理数据库文件,目的是尽可能将数据库数据加载到内存中以提高读写性能。MongoDB 默认会尽量使用可用的内存来缓存数据文件和索引,因此当数据集较大时,mongod.exe 可能会占用大量内存。 |
16 wheat0r 2024 年 9 月 20 日@iamtuzi3333 #15 会的,sqlserver 默认的最大内存占用参数是 2,147,483,647 megabytes (MB),运行一段时间后就会将内存占满。mysql 也存在类似情况,但是不像 sqlserver 一样饥渴。 |
18 yinft 2024 年 9 月 20 日哈哈 我们的项目用容器搭的 docker ,我直接限制容器最大内存占用了,简单粗暴 |
23 AlanBrian 2024 年 9 月 20 日你说它占用 5 万 M ,这不是和你设置的 50GB 很符合吗? mongodb 就是会尽可能使用多的内存。想要降低只能把 WiredTiger 内存设置往下降。 |
24 lingex 2024 年 9 月 20 日设置 50G ≈ 50000M ,没有问题吧? MongoDB 默认最大占用: (物理内存 - 1) / 2 GB |
25 jason56 2024 年 9 月 20 日试试 storageEngine = wiredTiger |
26 jason56 2024 年 9 月 20 日少贴一行 wiredTigerCacheSizeGB=2 |
27 SWALLOWW 2024 年 9 月 20 日它快不就是用内存吗 |
29 bcllemon 2024 年 9 月 20 日这个数据是一定要存 mongodb 吗? 是不是可以考虑换时序数据库 |
30 KingPL 2024 年 9 月 20 日业务场景应该选用时序数据库 |
31 Yasuke 2024 年 9 月 20 日试试 influxdb 、tdengine |
32 GodIsJasonBourne 2024 年 9 月 20 日工作缘故,我看过一遍 mongodb 文档说的明白,它就是会最大限度利用内存,加速读写。 楼上也说的很明白,从存储引擎设为 wiredTiger+配置 cacheSize 入手去优化。 |
33 975779964 2024 年 9 月 20 日`而且每个传感器一张表,时序数据库好像不太适合` 你是有多少传感器? 目前我们做的项目 监听 4 万多个传感器数据上报 ,每个传感器 差不多 每 5 秒 2~3 条数据上报,用的 tdengine 和 influxdb ,已经跑了 1 年多了,目前没啥问题 |
34 ktonline 2024 年 9 月 20 日用时序数据库啊 兄弟,哪怕 es 也行 |
36 iamtuzi3333 2024 年 9 月 20 日@bcllemon 时序数据库我还在找,但是数据是 JSON 对象,关键的字段 data 是一个数组,时序数据库大部分是存单个值,不太符合。 |
37 iamtuzi3333 2024 年 9 月 20 日重要的业务场景就是存储不同传感器设备数据,保障完整性,可用性,然后一个需求就是能够方便查询数据,这也是我为什么想单个传感器单表存储,传感器数量多,数据比较高频,字段比较多,有没有大佬指点一下这方面改用啥时候好用一点,后台用 nodejs 或者 Java 写查询功能多一点。目前公司就我一个人顶着,有点难顶,还请各位大佬指教,服务器用的 Window server ,华为云服务器,配置不会太差,此前有个项目有 600 多个传感器,也用的 MongoDB ,一启动内存就慢慢被占用满,导致可用内存越来越少,影响其他项目运行。数据除了存库还有个写入文件保存,目前初步排查是因为写入速度跟不上接入速度,导致数据跟文件全部堆积在内存中。 |
38 AlanBrian 2024 年 9 月 20 日不确定你这个 mongodb 是怎么部署的,我们的业务场景 mongodb 写入速度拉满,1 小时能写入好几亿的数据。可能跟机器的性能也有关系。 |
40 xsi640 2024 年 9 月 20 日这种场景,时序数据库不是更适合么? |
42 Haku 2024 年 9 月 20 日MongoDB 好像是这样的,狂吃内存,而且它不是只吃一点,不限制的话是你给多少吃多少那种。 |
43 iamtuzi3333 2024 年 9 月 20 日@Haku 参数都按不死,疯狂吃,吃的只剩下十几 M 可用,内存一看全是映射文件占着茅坑。 |
44 juvenn 2024 年 9 月 21 日[#12]( https://v2ex.com/t/1074136#r_15281543) 从 12 楼的统计看这个读写吞吐都很低,不应该占用这么高的内存。感觉还是哪里配置有问题。(我们有生产用的多个 mongo 集群,32GB 内存上千的 qps 都没有压力。) 1. 不要用 MMap ,切到 WiredTiger 。 |
45 iamtuzi3333 2024 年 9 月 23 日@juvenn 我目前就是使用的 WiredTiger 引擎,然后数据模型都是 JSON ,插入的时候我特地转为 JSON 插入,查询的实时性要求性不高,现在招人初步判断就是因为写入数据速度太慢,跟不上接收数据的速度,导致全部堆积在内存中。 |
46 roundgis 2025 年 1 月 16 日 via Android |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。