在 Debian 上限制 MongoDB 的内存使用,通常从 MongoDB 自身配置 入手,也需要注意 WiredTiger 缓存 和 系统层限制。下面按推荐程度给你一个完整方案。
MongoDB 使用 WiredTiger 存储引擎时,默认使用约 50% 的可用内存作为缓存。
sudo nano /etc/mongod.conf
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 2
表示 MongoDB 最多使用 2GB 内存作为缓存
不包含索引构建、连接、JS 引擎等占用的额外内存
✅ 建议设置:
1 ~ 2GBsudo systemctl restart mongod
如果你希望 MongoDB 进程整体不能超内存(包括缓存 + 其他开销)
sudo systemctl edit mongod
[Service]
MemoryMax=3G
(Debian 默认使用 cgroup v2)
sudo systemctl daemon-reexec
sudo systemctl restart mongod
✅ 优点:
docker run -d \
--name mongo \
-m 4g \
mongo \
--wiredTigerCacheSizeGB 2
✅ 建议:
-m 限制容器--wiredTigerCacheSizeGB 限制 MongoDB 内部缓存systemctl set-property mongod MemoryMax=3G
重启后可能失效(除非写入配置)
mongosh
db.serverStatus().mem
示例输出:
{
resident: 1200, // 实际占用 MB
virtual: 3000,
mapped: 800
}
❌ MongoDB 的 cacheSizeGB ≠ 总内存使用
它只是 WiredTiger 缓存
❌ free -m 看到 buff/cache 很高是正常的
MongoDB 会利用空闲内存做缓存
❌ 不要设置 cacheSizeGB 太小
小于 256MB 可能造成性能严重下降
| 服务器内存 | cacheSizeGB | systemd MemoryMax |
|---|---|---|
| 2GB | 0.5–1 | 1.5G |
| 4GB | 1.5–2 | 3G |
| 8GB+ | 3–4 | 6G |
如果你愿意,可以告诉我:
我可以帮你给出 精确的最优配置。