MongoDB 如何使用内存? 为什么内存满了?( 六 )

tcmalloc cache的管理策略 , MongoDB 层暴露了几个参数来调整 , 一般不需要调整 , 如果能清楚的理解tcmalloc原理及参数含义 , 可做针对性的调优;MongoDB tcmalloc 的内存状态可以通过 db.serverStatus().tcmalloc 查看 , 具体含义可以看 tcmalloc 的文档 。 重点可以关注下 total_free_bytes , 这个值告诉你有多少内存是 tcmalloc 自己缓存着 , 没有归还给 OS 的 。

如何控制内存使用?

合理配置 WiredTiger cacheSizeGB

  • 如果一个机器上只部署 Mongod , mongod 可以使用所有可用内存 , 则是用默认配置即可 。

  • 如果机器上多个mongod混部 , 或者mongod跟其他的一些进程一起部署 , 则需要根据分给mongod的内存配额来配置 cacheSizeGB , 按配额的60%左右配置即可 。

控制并发连接数

TCP连接对 mongod 的内存开销上面已经详细分析了 , 很多同学对并发有一定误解 , 认为「并发连接数越高 , 数据库的QPS就越高」 , 实际上在大部分数据库的网络模型里 , 连接数过高都会使得后端内存压力变大、上下文切换开销变大 , 从而导致性能下降 。

推荐阅读