在 CentOS 上优化 MongoDB 配置,通常从系统层、MongoDB 配置、存储与索引、监控几个方面入手。下面给你一份比较实用、可落地的优化清单(适用于 CentOS 7/8 + MongoDB 4.x/5.x/6.x)。
MongoDB 官方强烈建议关闭 THP。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(CentOS 7):
cat > /etc/rc.d/rc.local <<EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local
编辑 /etc/security/limits.conf:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
如果是 SSD:
echo noop > /sys/block/sda/queue/scheduler
(CentOS 8 多为 none)
sysctl -w vm.swappiness=1
net:
bindIp: 0.0.0.0 # 生产建议只绑内网IP
port: 27017
storage:
dbPath: /data/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 建议 = 内存的 50%~70%
collectionConfig:
blockCompressor: snappy
⚠️ cacheSizeGB 不要超过物理内存的 80%
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
maxIncomingConnections: 65536
db.orders.createIndex({ user_id: 1 })
db.orders.createIndex({ created_at: -1 })
用 explain 检查:
db.orders.find({user_id: 123}).explain("executionStats")
db.orders.createIndex({ user_id: 1, status: 1 })
writeConcern: { w: "majority", j: true }
readPreference: secondaryPreferred
db.serverStatus()
db.currentOp()
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
mongostatmongotop| 问题 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 全表扫描 | 加索引 |
| 磁盘 IO 高 | journal / 写放大 | SSD + 缓存 |
| 内存爆 | cacheSize 过大 | 调小 |
| 连接满 | 连接未释放 | 连接池 |
如果你愿意,可以告诉我:
我可以给你更针对性的配置示例。