温馨提示×

linux mongodb配置如何限制内存

小樊
36
2026-10-28 05:05:50
栏目: 云计算

在 Linux 上限制 MongoDB 的内存使用,常见做法有 操作系统级限制、MongoDB 自身参数限制、以及 cgroup / systemd 限制。下面按使用场景说明。


一、MongoDB 自身参数(最推荐先试)

1. 限制 WiredTiger 缓存(最重要)

MongoDB 默认会用约 50% 物理内存 作为 WiredTiger 缓存。

在 mongod.conf 中配置:

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2

表示最多使用 2GB 缓存。

重启 MongoDB:

systemctl restart mongod

✅ 适合:控制“主要内存占用”


2. 限制内存映射(老版本 / MMAP)

如果是旧引擎(基本已不用):

storage:
  mmapv1:
    smallFiles: true

二、Linux 系统级限制(不依赖 MongoDB)

方法 1:ulimit(不推荐单独用)

MongoDB 官方不建议用 ulimit -v 限制虚拟内存,容易导致崩溃。

仅可限制文件句柄:

ulimit -n 64000

方法 2:systemd 限制(推荐)

编辑 MongoDB 的 systemd 配置:

systemctl edit mongod

添加:

[Service]
MemoryMax=4G
MemoryHigh=3G

保存后:

systemctl daemon-reload
systemctl restart mongod

✅ 适合:容器 / 云服务器 / 多实例


方法 3:cgroup(高级)

cgcreate -g memory:/mongo
echo 4G > /sys/fs/cgroup/memory/mongo/memory.limit_in_bytes
cgexec -g memory:mongo mongod

三、Docker 环境(最常见)

docker run -d \
  --name mongo \
  -m 4g \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=pass \
  mongo --wiredTigerCacheSizeGB 2

✅ -m 限制总内存
✅ cacheSizeGB 防止 OOM


四、推荐组合(生产建议)

✅ 最佳实践

  • cacheSizeGB = 物理内存的 40%~50%
  • systemd MemoryMax 略大于 cacheSizeGB
  • 避免 swap 频繁

示例(8G 服务器):

cacheSizeGB: 3
MemoryMax=5G

五、验证内存使用

mongosh
db.serverStatus().wiredTiger.cache

或:

ps -o pid,rss,comm -p $(pgrep mongod)

如果你说明:

  • 是否是 Docker / 裸机 / K8s
  • MongoDB 版本
  • 服务器 内存大小

我可以给你一套精确配置。

0 踩