在 Linux 上限制 MongoDB 的内存使用,常见做法有 操作系统级限制、MongoDB 自身参数限制、以及 cgroup / systemd 限制。下面按使用场景说明。
MongoDB 默认会用约 50% 物理内存 作为 WiredTiger 缓存。
在 mongod.conf 中配置:
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 2
表示最多使用 2GB 缓存。
重启 MongoDB:
systemctl restart mongod
✅ 适合:控制“主要内存占用”
如果是旧引擎(基本已不用):
storage:
mmapv1:
smallFiles: true
ulimit(不推荐单独用)MongoDB 官方不建议用 ulimit -v 限制虚拟内存,容易导致崩溃。
仅可限制文件句柄:
ulimit -n 64000
编辑 MongoDB 的 systemd 配置:
systemctl edit mongod
添加:
[Service]
MemoryMax=4G
MemoryHigh=3G
保存后:
systemctl daemon-reload
systemctl restart mongod
✅ 适合:容器 / 云服务器 / 多实例
cgcreate -g memory:/mongo
echo 4G > /sys/fs/cgroup/memory/mongo/memory.limit_in_bytes
cgexec -g memory:mongo mongod
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%MemoryMax 略大于 cacheSizeGB示例(8G 服务器):
cacheSizeGB: 3
MemoryMax=5G
mongosh
db.serverStatus().wiredTiger.cache
或:
ps -o pid,rss,comm -p $(pgrep mongod)
如果你说明:
我可以给你一套精确配置。