在 Debian 上运行 MongoDB 的“调优”通常分为 系统层(OS)、MongoDB 配置层、存储/硬件层 和 应用层 四个方面。下面给你一份比较实用的 Debian + MongoDB 调优清单(适用于 MongoDB 4.x / 5.x / 6.x / 7.x)。
MongoDB 官方强烈建议关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
开机自动生效:
systemctl edit mongod
添加:
[Service]
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
或写进 /etc/rc.local。
MongoDB 需要大量文件描述符:
编辑 /etc/security/limits.conf:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
Systemd 下也要加:
systemctl edit mongod
[Service]
LimitNOFILE=64000
LimitNPROC=32000
SSD 使用 none 或 mq-deadline:
echo none > /sys/block/sdX/queue/scheduler
sysctl vm.swappiness=1
配置文件路径通常是:
/etc/mongod.conf
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 物理内存的 50%~70%
collectionConfig:
blockCompressor: snappy
⚠️ cacheSizeGB 不要超过物理内存的 70%
storage:
journal:
commitIntervalMs: 100 # 默认 100,低延迟可调到 30
net:
maxIncomingConnections: 65536
serviceExecutor: adaptive # MongoDB 4.4+
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
db.currentOp({ "secs_running": { "$gt": 1 } })
db.collection.find({...}).explain("executionStats")
(A, B) 索引但只查 BwriteConcern: majority 保证安全secondaryPreferred 分担压力shard key 必须高基数、低单调性_id 作为 shard key(容易热点)mongostat
mongotop
iostat -x 1
vmstat 1
htop
MongoDB Exporter:
mongodb_exporter
| 问题 | 可能原因 |
|---|---|
| CPU 高 | 缺索引 / 全表扫描 |
| 磁盘 IO 高 | journal / 大量写 |
| 内存涨 | cacheSize 配置不合理 |
| 延迟高 | 网络 / 锁 / 慢查询 |
| OOM | swap 未关 / cache 过大 |
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 10
net:
maxIncomingConnections: 65536
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
如果你愿意,可以告诉我:
我可以给你 针对性的调优方案。