当前位置:首页 > 数据库 > MongoDB内存配置 --wiredTigerCacheSizeGB

MongoDB内存配置 --wiredTigerCacheSizeGB

2022年09月17日 20:02:23数据库6
用top命令查看系统占用内存的情况 top -p $(pidof mongod),发现mongod占用了8G内存的35.6%。在服务器上运行两个mongod进程,很容易导致mongod异常退出。

一度以为是C++程序发生内存泄漏导致了系统异常崩溃,现在可以肯定是由mongod配置的内存占用太高导致的。

MongoDB内存配置 --wiredTigerCacheSizeGB _ JavaClub全栈架构师技术笔记

(也可以通过命令 free -m 查看系统的内存使用情况,但是要注意可用内存是free+buffers+cached)

内存不足引发bulk_write_exception。

MongoDB内存配置 --wiredTigerCacheSizeGB _ JavaClub全栈架构师技术笔记


关于mongod如何管理内存,度娘有如下一段话:

目前,MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟缓存管理器去处理,这样的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,事实上MongoDB会占用所有能用的内存,所以最好不要把别的服务和MongoDB放一起。

MongoDB Manual上说:

MongoDB keeps most recently used data in RAM. If you have created indexes for your queries and your working data set fits in RAM, MongoDB serves all queries from memory.

简而言之,就是mongod把这事交给操作系统了,缺了就跟OS要内存,多了也不还,爱咋咋地。

如果需要强行收回内存也不是没有办法:

  1. 重启mongod,或者调用 db.runCommand({closeAllDatabases:1})来清除内存
  2. 使用Linux命令清除缓存中的数据:echo 3 > /proc/sys/vm/drop_caches

在应用运行过程中重启mongod,是比较ugly的做法,可以尝试使用第二种方法。

还有没有更好的方法控制mongodb占用的内存大小呢?

查看mongod -h发现mongod提供了额外的可选参数来控制WiredTiger存储引擎所占用的cache size。需要注意的是,cache size设置较低,同时mongodb复杂查询很频繁的话,会有延迟发生。

cacheSizeGB 指的就是Cache size,包括数据和索引。Mongod本身使用内存如连接池堆栈以及sorting buffer等都是额外的,不会被统计到这个数字里面。如果索引在内存,查询冷数据取决于你的IO能力。如果IO latency很低,系统也没有是高负载,那响应时间应该是毫秒级的区别。但是如果查询很频繁,又涉及到很多范围、批量查询,IOPS又跟不上,那就有可能到几百几千毫秒都有可能。

MongoDB内存配置 --wiredTigerCacheSizeGB _ JavaClub全栈架构师技术笔记

Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:

  • 50% of RAM minus 1 GB, or
  • 256 MB.

从官方文档可以得知,一个mongod实例几乎要占用服务器上一般的内存,也就是说,如果在同一台服务器上同时开始两个或以上mongod实例,那么很大可能会发生内存不足而异常退出。这就是导致bulk_write_exception问题的原因。

解决方案是使用 --wiredTigerCacheSizeGB设置内存大小,

MongoDB内存配置 --wiredTigerCacheSizeGB _ JavaClub全栈架构师技术笔记


作者:Sumtoo
来源链接:https://blog.csdn.net/LuyaoYing001/article/details/75576820

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42857.html

标签: MongoDB
分享给朋友:

“MongoDB内存配置 --wiredTigerCacheSizeGB” 的相关文章

CentOS7.2  安装 MongoDB 3.4

CentOS7.2 安装 MongoDB 3.4

服务器版本 CentOS7.2 MongoDB版本 3.4 ###1/ 下载所需资源 阿里镜像地址 http://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb-org/3.4/x86_64/RPMS/...

Centos 使用yum安装MongoDB 4.0

Centos 使用yum安装MongoDB 4.0

1.配置MongoDB的yum源 创建yum源文件: #cd /etc/yum.repos.d  #vim mongodb-org-4.0.repo  添加以下内容:(我们这里使用阿里云的源) [mngodb-org] nam...

Navicat for MongoDB 破解

Navicat for MongoDB 破解

Navicat for MongoDB是一款功能强大,直观的,易于使用MongoDB管理和开发的终极解决方案。Navicat for MongoDB为您提供了一个高度可用的GUI,以简化您的日常数据库任务。我们精心设...

Centos7下yum安装mongodb

  简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 查看官方网站 MongoDB特点...

WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)

WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)

这是泥瓦匠的第105篇原创 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-5-thymeleaf-mong...

MongoDB与Mysql常用命令解释

原文 本文旨在介绍MongoDB,Mysql的常用命令:将MongoDB 和传统的关系型数据库的常用命令对照起来学习,更加便于记忆和理解。 MongoDB是由数据库(database/repository)、集合(collection)、文档对象(documen...

JAVA单例MongoDB工具类

我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用。 没用Spring Data、Morphia等框架是为了减少学习、维护成本,另外自己直接JDBC方式的话可以更灵活,为自己以后的积累留一个脚印。   JAVA驱动版本...

CentOS 8.2上安装部署MongoDB 4.4

CentOS 8.2上安装部署MongoDB 4.4

目录 什么是MongoDB?: 环境规格: CentOS 8中安装MongoDB Yum存储库: CentOS 8中为MongoDB设置资源限制: 在CentOS 8上安装MongoDB数据库: C...

linux (centos)下安装 mongodb  v3.2 笔记

linux (centos)下安装 mongodb v3.2 笔记

  1.下载mongodb      默认都是64位的,这个有点尴尬。。。  centos系统 64位地址: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel6...

centos7 rpm方式安装mongoDB

centos7 rpm方式安装mongoDB #下载三个rpm包 wget https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-4.2/RPMS/mongodb-org-tools-4.2.8-...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。