centos mongodb内存管理
导读:CentOS下MongoDB内存管理指南 一、核心内存配置:WiredTiger缓存设置 MongoDB(版本≥3.2默认使用WiredTiger存储引擎)的内存管理核心是WiredTiger缓存(storage.wiredTiger.en...
CentOS下MongoDB内存管理指南
一、核心内存配置:WiredTiger缓存设置
MongoDB(版本≥3.2默认使用WiredTiger存储引擎)的内存管理核心是WiredTiger缓存(storage.wiredTiger.engineConfig.cacheSizeGB
),用于缓存数据和索引,直接影响查询性能。
- 默认行为:默认占用物理内存的50%(但不超过256MB),适合大多数通用场景,但需根据服务器资源调整。
- 调整方法:编辑MongoDB配置文件(
/etc/mongod.conf
),在storage.wiredTiger.engineConfig
下设置cacheSizeGB
(单位:GB)。例如,16GB内存服务器可设置为10-12GB(保留部分内存给操作系统及其他应用)。 - 动态调整:通过MongoDB Shell动态修改(需重启生效):
db.adminCommand({ setParameter: 1, wiredTigerEngineRuntimeConfig: "cache_size=8G"} )
二、操作系统级内存优化
1. 关闭Transparent HugePages(THP)
THP会导致内存碎片化,影响MongoDB性能。需在/etc/sysctl.conf
中添加:
vm.nr_hugepages = 0
并执行sudo sysctl -p
使配置生效。
2. 调整Swappiness参数
vm.swappiness
控制操作系统使用交换空间(Swap)的倾向,建议设置为10或更低(值越低,越少使用Swap):
sudo sysctl vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
3. 增加文件描述符限制
MongoDB需要大量文件描述符处理并发连接,编辑/etc/security/limits.conf
,添加:
mongod soft nofile 65536
mongod hard nofile 65536
三、内存使用监控与验证
1. 查看WiredTiger缓存状态
通过MongoDB Shell执行以下命令,查看缓存命中率、脏数据比例等关键指标:
db.serverStatus().wiredTiger.cache
重点关注:
bytes dirty in the cache
(脏数据量,需控制在合理范围);bytes read into cache
(从磁盘读取到缓存的数据量,反映缓存命中率)。
2. 查看整体内存使用
使用Shell命令查看MongoDB进程的内存占用:
db.serverStatus().mem
输出包括:resident
(常驻内存)、virtual
(虚拟内存)、mapped
(映射内存)等。
3. 系统层面监控
使用top
、htop
或vmstat
命令监控系统内存使用情况,确保操作系统及其他应用有足够内存。
四、其他优化建议
1. 定期重启服务
长期运行的MongoDB可能积累内存碎片,建议每周或每月重启一次(通过cron
任务自动化):
0 3 * * 0 systemctl restart mongod
2. 使用SSD存储
SSD的高I/O性能可减少MongoDB对内存的依赖(如减少磁盘读取次数),提升整体性能。
3. 查询优化
- 为常用查询字段创建索引(
db.collection.createIndex({ field: 1} )
); - 避免全表扫描(如使用
limit()
、projection()
限制返回数据量); - 分页查询时使用
skip()
+limit()
或$slice
操作符,减少内存占用。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos mongodb内存管理
本文地址: https://pptw.com/jishu/720925.html