大佬们,大问题请教,内存占满

2024-09-19 17:45:28 +08:00
 iamtuzi3333
小弟用 MongoDB 存储实时数据,都是传感器数据,十几个传感器,每秒都有数据发过来,需要实时存储,目前用了一个队列去一遍存一遍入库,集合都是分散开的,但是发现一个很严重的问题就是会把服务器的备用内存持续压榨,导致可用内存越来越小,用的 Window Server 服务器,192GB 只剩下十几 M ,可用内存,这个太夸张了,而且看进程 mongod.exe 这个进程占了 5 万多 MB ,很夸张,目前小弟也没有方法能立马排查出来,有大佬有过这个经验吗,请大佬指教一下。
4799 次点击
所在节点    MongoDB
46 条回复
iamtuzi3333
2024-09-20 08:59:45 +08:00
@yinft 羡慕,咱们没人去搞 docker ,项目也是能 run 就行
yinft
2024-09-20 09:09:22 +08:00
@iamtuzi3333 #21 mongodb 配置文件也是能指定内存进行限制的啊
AlanBrian
2024-09-20 09:22:32 +08:00
你说它占用 5 万 M ,这不是和你设置的 50GB 很符合吗? mongodb 就是会尽可能使用多的内存。想要降低只能把 WiredTiger 内存设置往下降。
lingex
2024-09-20 09:58:11 +08:00
设置 50G ≈ 50000M ,没有问题吧?

MongoDB 默认最大占用: (物理内存 - 1) / 2 GB
jason56
2024-09-20 10:04:32 +08:00
试试 storageEngine = wiredTiger
jason56
2024-09-20 10:07:41 +08:00
少贴一行 wiredTigerCacheSizeGB=2
SWALLOWW
2024-09-20 10:20:49 +08:00
它快不就是用内存吗
pangdundun996
2024-09-20 10:22:57 +08:00
把 WiredTiger 内存占用调小点就行了
bcllemon
2024-09-20 11:27:53 +08:00
这个数据是一定要存 mongodb 吗? 是不是可以考虑换时序数据库
KingPL
2024-09-20 13:28:05 +08:00
业务场景应该选用时序数据库
maokg
2024-09-20 13:57:02 +08:00
试试 influxdb 、tdengine
GodIsJasonBourne
2024-09-20 14:02:46 +08:00
工作缘故,我看过一遍 mongodb 文档说的明白,它就是会最大限度利用内存,加速读写。 楼上也说的很明白,从存储引擎设为 wiredTiger+配置 cacheSize 入手去优化。
975779964
2024-09-20 14:10:51 +08:00
`而且每个传感器一张表,时序数据库好像不太适合`

你是有多少传感器? 目前我们做的项目 监听 4 万多个传感器数据上报 ,每个传感器 差不多 每 5 秒 2~3 条数据上报,用的 tdengine 和 influxdb ,已经跑了 1 年多了,目前没啥问题
ktonline
2024-09-20 14:37:37 +08:00
用时序数据库啊 兄弟,哪怕 es 也行
iamtuzi3333
2024-09-20 14:54:40 +08:00
@yinft 我限制了,但是还是用的很严重。
@AlanBrian 但是现在备用内存疯狂涨,把可用压榨到十几 M 了,我看了内存占用里面,备用内存中全是他的 mapper 映射文件,用量太厉害了。
@jason56 我用的新版本,就是这个引擎,内存设定的是 50 多 G ,
@pangdundun996 已经改了,但是效果不明显。
@GodIsJasonBourne 这个新版已经是这个设置,参数设置的 50 多 G 。
iamtuzi3333
2024-09-20 14:58:50 +08:00
@bcllemon 时序数据库我还在找,但是数据是 JSON 对象,关键的字段 data 是一个数组,时序数据库大部分是存单个值,不太符合。
@KingPL 目前是还在找。
@975779964 目前传感器会有几百个,然后数据格式都是 JSON ,其中设备不同,字段也不同,然后传感器每秒上传数据,其中数据有多个字段,其中一个字段是数组,存的元素比较多,几百个,目前看了 influxdb ,他好像只支持单值存储,还有其他好推荐的吗。每个传感器单表就是不想多传感器数据混合在一起,最多的业务场景就是突然要查询某一段的历史数据。
@ktonline 这个全称是啥,大佬指点一下。
iamtuzi3333
2024-09-20 15:03:26 +08:00
重要的业务场景就是存储不同传感器设备数据,保障完整性,可用性,然后一个需求就是能够方便查询数据,这也是我为什么想单个传感器单表存储,传感器数量多,数据比较高频,字段比较多,有没有大佬指点一下这方面改用啥时候好用一点,后台用 nodejs 或者 Java 写查询功能多一点。目前公司就我一个人顶着,有点难顶,还请各位大佬指教,服务器用的 Window server ,华为云服务器,配置不会太差,此前有个项目有 600 多个传感器,也用的 MongoDB ,一启动内存就慢慢被占用满,导致可用内存越来越少,影响其他项目运行。数据除了存库还有个写入文件保存,目前初步排查是因为写入速度跟不上接入速度,导致数据跟文件全部堆积在内存中。
AlanBrian
2024-09-20 15:10:05 +08:00
不确定你这个 mongodb 是怎么部署的,我们的业务场景 mongodb 写入速度拉满,1 小时能写入好几亿的数据。可能跟机器的性能也有关系。
Moyyyyyyyyyyye
2024-09-20 15:18:43 +08:00
数据库单独部署,线上环境哪有数据库和应用程序一个机器的
xsi640
2024-09-20 15:36:27 +08:00
这种场景,时序数据库不是更适合么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1074136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX