V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
iamtuzi3333
V2EX  ›  MongoDB

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

  •  
  •   iamtuzi3333 · 12 小时 14 分钟前 · 596 次点击
    小弟用 MongoDB 存储实时数据,都是传感器数据,十几个传感器,每秒都有数据发过来,需要实时存储,目前用了一个队列去一遍存一遍入库,集合都是分散开的,但是发现一个很严重的问题就是会把服务器的备用内存持续压榨,导致可用内存越来越小,用的 Window Server 服务器,192GB 只剩下十几 M ,可用内存,这个太夸张了,而且看进程 mongod.exe 这个进程占了 5 万多 MB ,很夸张,目前小弟也没有方法能立马排查出来,有大佬有过这个经验吗,请大佬指教一下。
    17 条回复    2024-09-20 00:14:33 +08:00
    liprais
        1
    liprais  
       11 小时 59 分钟前
    你不让 mongodb 用内存他咋干活?
    pxllong
        2
    pxllong  
       11 小时 58 分钟前
    WiredTiger 这几个参数贴下
    iamtuzi3333
        3
    iamtuzi3333  
    OP
       11 小时 56 分钟前
    @pxllong 之前修改是 50GB ,但是还是吃的太厉害了,影响其他项目运行了,还有其他办法吗
    iamtuzi3333
        4
    iamtuzi3333  
    OP
       11 小时 55 分钟前
    @liprais 但是吃的太厉害了,影响其他项目运行了,现在很难受,我不知道怎么改好一点,虽然他确实很好用,在考虑要不要换其他数据库了
    liprais
        5
    liprais  
       11 小时 53 分钟前
    @iamtuzi3333
    1.你可以限制下 mongodb 占多少内存的
    2.应用跟数据库跑在一个节点上不是好的做法
    iamtuzi3333
        6
    iamtuzi3333  
    OP
       11 小时 45 分钟前
    @liprais 有道理,我申请一下多节点服务器,但是这个估计有点难,1 这个我限制了一半内存,明天看看是啥效果,谢谢大佬解答。
    pxllong
        7
    pxllong  
       11 小时 43 分钟前
    @iamtuzi3333 mongostat 贴下参数
    dejavuwind
        8
    dejavuwind  
       11 小时 19 分钟前
    你有多少传感器数据需要频繁查询的,可以考虑下冷热分离,冷数据换别的存储方式,定期任务进行冷热数据迁移
    dejavuwind
        9
    dejavuwind  
       11 小时 17 分钟前
    @dejavuwind 可以考虑专门的时序数据库 influxdb tdengine 之类的
    iamtuzi3333
        10
    iamtuzi3333  
    OP
       10 小时 41 分钟前
    @dejavuwind 不需要频繁查询,但是有时候需要翻查历史某一段时间的数据,我看过时序数据库,但是部分是单个时间单个数据,我的数据是{id:1,data:[1,2,3]}这种,有多个字段,data 是个浮点数数组,有时候会是 200 个数字。而且每个传感器一张表,时序数据库好像不太适合。热数据我都放在了 Redis 的队列中了。
    iamtuzi3333
        11
    iamtuzi3333  
    OP
       10 小时 34 分钟前
    @pxllong 没法发图片,我打出来部分信息,每秒输出打印 10 条左右,有个 vsize 数据每条都是 6.49G ,
    iamtuzi3333
        12
    iamtuzi3333  
    OP
       10 小时 33 分钟前
    @pxllong 复制了一条,大概就是这样
    insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
    *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 111b 59.8k 6 Sep 19 19:25:06.463
    *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 112b 59.9k 6 Sep 19 19:25:07.463
    *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 111b 59.8k 6 Sep 19 19:25:08.463
    *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 111b 59.8k 6 Sep 19 19:25:09.464
    *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 112b 59.9k 6 Sep 19 19:25:10.463
    *0 *0 *0 *0 0 4|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 514b 60.8k 6 Sep 19 19:25:11.463
    *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 111b 59.8k 6 Sep 19 19:25:12.464
    *0 *0 *0 *0 0 0|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 111b 59.8k 6 Sep 19 19:25:13.464
    *0 *0 *0 *0 0 1|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 112b 59.9k 6 Sep 19 19:25:14.464
    *0 *0 *0 *0 0 2|0 0.0% 0.0% 0 6.49G 255M 0|0 0|0 321b 60.5k 6 Sep 19 19:25:15.464
    iamtuzi3333
        13
    iamtuzi3333  
    OP
       10 小时 31 分钟前
    目前项目我停掉了,占用太多了,估计 mongo 就是吃内存,这个似乎是他原本就这么设计的。
    wheat0r
        14
    wheat0r  
       9 小时 25 分钟前
    @iamtuzi3333 #13 基本上数据库都倾向于吃内存吧
    iamtuzi3333
        15
    iamtuzi3333  
    OP
       6 小时 47 分钟前
    @wheat0r 这个倒不会,同台服务器上面有个 sqlserver ,MySQL ,上面也是存了大量数据,但是未发现有这么吃内存,而且现在发现 mongo 太迟了,他的底层是内存映射( Memory-Mapped Files ) 来处理数据库文件,目的是尽可能将数据库数据加载到内存中以提高读写性能。MongoDB 默认会尽量使用可用的内存来缓存数据文件和索引,因此当数据集较大时,mongod.exe 可能会占用大量内存。
    现在这是个无底洞,而且不会自动清除映射文件,全是占用在备用内存中,导致可用内存越来越少。现在我在想找新的数据库来替换了。
    wheat0r
        16
    wheat0r  
       5 小时 48 分钟前
    @iamtuzi3333 #15 会的,sqlserver 默认的最大内存占用参数是 2,147,483,647 megabytes (MB),运行一段时间后就会将内存占满。mysql 也存在类似情况,但是不像 sqlserver 一样饥渴。
    ShuA1
        17
    ShuA1  
       5 小时 45 分钟前
    @wheat0r mysql 也存在类似情况,但是不像 sqlserver 一样饥渴。
    可能是你配置的问题, 一样可以吃满
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   933 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:59 · PVG 05:59 · LAX 14:59 · JFK 17:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.