优化 Debian 上 MongoDB 的配置,通常可以从系统层面、MongoDB 配置、存储与索引、监控与运维几个方面入手。下面给你一套比较实用的优化思路(以 MongoDB 5.x/6.x + Debian 11/12 为例)。
mkfs.xfs /dev/sdX
atime:/dev/sdX /data xfs defaults,noatime 0 0
MongoDB 对 THP 非常敏感:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
持久化(systemd):
cat > /etc/systemd/system/disable-thp.service <<EOF
[Unit]
Description=Disable THP
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now disable-thp
在 /etc/security/limits.conf:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
storage:
dbPath: /data/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 建议 = 物理内存的 50%~70%
collectionConfig:
blockCompressor: snappy
net:
bindIp: 0.0.0.0
port: 27017
maxIncomingConnections: 65536
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
verbosity: 0
explain("executionStats") 分析慢查询db.collection.aggregate([{ $indexStats: {} }])
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
查看:
db.system.profile.find().sort({ts:-1}).limit(5)
writeConcern: { w: 1, j: false }
⚠️ 有数据丢失风险,仅限日志类数据
readPreference=secondary 分担读压力mongostat
mongotop
htopiostat -x 1dstatdb.collection.reIndex()
db.runCommand({ compact: "collection" })
❌ 不要在 MongoDB 上跑 apt 自动升级
❌ 不要使用 ext4 + THP
❌ 不要把 dbPath 放在 / 根分区
❌ cacheSizeGB 设置过大导致 OS 缓存不足
如果你愿意,可以告诉我:
我可以直接帮你给出一份针对性的 mongod.conf 示例。