在 CentOS 上 MongoDB 变慢 / 配置后性能差,通常不是“配置本身慢”,而是资源、参数或架构问题。下面按最常见原因 → 排查 → 解决办法给你一个实用清单。
MongoDB 对磁盘非常敏感。
检查
iostat -x 1
看 %util 是否接近 100%
解决
mount -o remount,noatime /data
MongoDB 依赖 WiredTiger 缓存
检查
free -h
关键参数(mongod.conf)
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 建议 = 物理内存的 50%~70%
⚠️ 默认 cacheSize 可能太小,导致频繁落盘
检查慢查询
db.setProfilingLevel(1, 100)
db.system.profile.find().sort({ts:-1}).limit(5)
解决
db.collection.createIndex({ field: 1 })
MongoDB 官方明确建议关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:
vim /etc/rc.d/rc.local
# 加入上面两行
chmod +x /etc/rc.d/rc.local
CentOS 默认 SELinux 可能拖慢 IO
临时测试
setenforce 0
如确认是 SELinux:
vim /etc/selinux/config
SELINUX=disabled
/etc/mongod.conf 推荐:
storage:
dbPath: /data/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 0.0.0.0
port: 27017
MongoDB 官方要求:
ulimit -n 64000
ulimit -u 64000
配置:
vim /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
# 查看当前慢查询
db.currentOp({ "secs_running": { "$gt": 1 } })
# 查看 Mongo 状态
mongostat
mongotop
你可以告诉我:
我可以直接给你 一份可落地的优化配置。