温馨提示×

centos mongodb内存管理

小樊
50
2025-09-30 13:26:14
栏目: 云计算

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. 系统层面监控

使用tophtopvmstat命令监控系统内存使用情况,确保操作系统及其他应用有足够内存。

四、其他优化建议

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操作符,减少内存占用。

0