如何从命令行手动运行mongod并输出日志?排查Mongo崩溃问题
排查Ubuntu 16上MongoDB 3.4.11启动无反馈的问题
这种启动毫无动静、连日志都不输出的情况确实挺棘手的,咱们一步步拆解排查:
先核对核心目录权限
MongoDB默认以mongodb用户运行,先确认数据目录和日志目录的权限是否正确:ls -ld /var/lib/mongodb /var/log/mongodb id mongodb正常情况下这两个目录的所有者和组都应该是
mongodb:mongodb,如果权限不对,用这条命令修正:sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb直接运行二进制文件抓实时输出
别依赖service或systemctl的封装,直接用mongodb用户身份启动二进制文件,指定配置文件,这样能看到终端直接抛出的错误:sudo -u mongodb /usr/bin/mongod --config /etc/mongodb.conf这一步几乎肯定能拿到关键线索——比如配置文件语法错误、数据目录损坏、端口被占用,甚至二进制文件本身损坏都能看出来。
验证配置文件有效性
MongoDB 3.4用YAML格式的配置文件,缩进错误很容易导致启动失败。先检查配置文件语法:/usr/bin/mongod --config /etc/mongodb.conf --validate如果有语法问题,会直接指出错误位置。
排查系统资源与依赖
- 内存:用
free -h查看可用内存,MongoDB启动需要基础内存,内存不足可能直接静默崩溃; - 磁盘:
df -h检查/var/lib/mongodb所在分区是否已满,或者有没有磁盘读写权限问题; - 依赖库:用
ldd /usr/bin/mongod检查二进制文件的依赖库是否齐全,如果有not found的条目,需要安装对应的依赖包。
- 内存:用
检查核心转储文件
如果MongoDB启动后直接崩溃,可能会生成core dump。先查看系统是否开启了core dump:ulimit -c如果输出是0,说明没开启,临时开启后再尝试启动:
ulimit -c unlimited sudo -u mongodb /usr/bin/mongod --config /etc/mongodb.conf之后检查当前目录或
/var/crash下是否有core文件,用gdb分析崩溃原因:gdb /usr/bin/mongod core.[PID]确认端口是否被占用
检查默认端口27017有没有被其他进程占用:netstat -tulpn | grep 27017如果被占用,要么杀掉对应进程,要么修改MongoDB配置文件里的
port参数换个端口。
内容的提问来源于stack exchange,提问作者Cerin
相关产品推荐
相关产品推荐

