CentOS 上 MongoDB 故障排查的配置与步骤
一 快速定位流程
systemctl status mongod、ss -lntp | grep 27017,确认进程存活与监听端口。tail -n50 /var/log/mongodb/mongod.log,优先关注包含 ERROR/FATAL 的行及最近一次启动的堆栈信息。/etc/mongod.conf,重点核对 storage.dbPath、systemLog.path、net.bindIp、processManagement.fork、pidFilePath 等是否与运行环境一致。free -m、df -h、top,排除 内存/磁盘/CPU 瓶颈;必要时临时调高日志级别获取更多线索。systemctl restart mongod && systemctl status mongod,确认状态为 active (running) 且端口可达。二 关键配置项用于排查
storage.dbPath: /var/lib/mongosystemLog.destination: filesystemLog.path: /var/log/mongodb/mongod.logsystemLog.logAppend: truenet.bindIp: 127.0.0.1,<管理网IP>(故障排查阶段可先仅绑定本地,确认后再放开)net.port: 27017processManagement.fork: false(前台运行便于直接看到启动报错)processManagement.pidFilePath: /var/run/mongodb/mongod.pidsecurity.authorization: disabledsystemLog.verbosity: 1~2(默认 0,排查时临时提升;生产谨慎)systemLog.component.query.verbosity: 1operationProfiling.mode: slowOp、operationProfiling.slowOpThresholdMs: 100db.setProfilingLevel(1, 100)三 常见故障与对应配置修正
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pidmkdir -p /var/run/mongodb && chown mongodb:mongodb /var/run/mongodb/etc/mongod.conf 中设置 pidFilePath: /var/run/mongodb/mongod.pidPIDFile 与上述路径一致,执行 systemctl daemon-reload 后重启。PIDFile;避免使用易清理的临时目录;必要时改用持久目录(如 /var/run/mongodb)。net.bindIp 是否包含服务器实际 IP;排查防火墙:firewall-cmd --zone=public --add-port=27017/tcp --permanent && firewall-cmd --reloadss -lntp | grep 27017、mongo --host 127.0.0.1:27017/etc/rc.local 或 systemd 服务中写入
echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defragcat /sys/kernel/mm/transparent_hugepage/enabled 应为 never。setenforce 0(宽容模式)/etc/selinux/config,设置 SELINUX=permissive 或 disabled,重启生效。top、free -m、df -hecho 1 > /proc/sys/vm/drop_caches(谨慎,仅在必要时)storage.wiredTiger 下设置 engineConfig.cacheSizeGB(如 4~8GB,视内存而定)。四 日志与慢查询排查配置
systemLog.verbosity: 2,必要时对组件单独提升;重启后在另一个终端执行 tail -f /var/log/mongodb/mongod.log 观察启动与运行期错误。operationProfiling.mode: slowOp、operationProfiling.slowOpThresholdMs: 100db.system.profile.find().sort({$natural:-1}).limit(50);关注 COLLSCAN(全表扫描)、docsExamined/keysExamined 过大、SORT 无索引等关键字,针对性建立或优化索引(必要时使用 background: true 避免阻塞)。db.currentOp(true) 查找长时间运行操作;必要时 db.killOp(opid) 终止异常操作(谨慎)。db.adminCommand({logRotate: 1})/var/log/mongodb/mongod.log { daily rotate 7 compress delaycompress missingok notifempty create 640 mongodb mongodb sharedscripts postrotate /usr/bin/pkill -USR1 mongod endscript }