Ubuntu 16.04下MongoDB因内存压力崩溃后自动重启配置咨询
解决Ubuntu 16.04中MongoDB崩溃自动重启的问题
嘿,我来帮你搞定这个问题!其实不用纠结systemctl和supervisord二选一,两种方式都能实现MongoDB因内存压力崩溃后自动重启,我给你分别捋清楚:
方案一:直接通过systemctl配置自动重启(推荐)
既然mongod本身已经用systemd管理了,这是最省心的方式,不用额外切换到supervisord:
- 打开MongoDB的systemd服务配置文件:
sudo nano /lib/systemd/system/mongod.service - 在
[Service]区块里,添加或修改以下两行配置:Restart=always RestartSec=5Restart=always:不管mongod因为什么原因退出(包括内存压力崩溃),都会自动重启RestartSec=5:崩溃后等待5秒再重启,避免短时间内频繁重启导致系统负载过高
另外确认一下Type字段,MongoDB默认是Type=forking(因为它会后台运行),这个不用改。
- 重新加载systemd的配置文件:
sudo systemctl daemon-reload - 重启mongod服务让配置生效:
sudo systemctl restart mongod - 验证效果:手动杀死mongod进程,然后查看状态确认它自动重启了
sudo pkill mongod systemctl status mongod
方案二:用supervisord接管mongod管理
如果你更习惯用supervisord统一管理所有服务,可以按以下步骤操作:
第一步:停止并禁用原systemctl服务
先把原来的systemd管理停掉,避免两个管理工具冲突:
sudo systemctl stop mongod sudo systemctl disable mongod
第二步:创建supervisord的mongod配置文件
在/etc/supervisor/conf.d/目录下新建mongod.conf文件:
sudo nano /etc/supervisor/conf.d/mongod.conf
写入以下内容:
[program:mongod] command=/usr/bin/mongod --config /etc/mongod.conf autostart=true autorestart=true startretries=3 user=mongodb stdout_logfile=/var/log/mongod/supervisor.log stderr_logfile=/var/log/mongod/supervisor.err.log
参数说明:
command:指定mongod的启动命令和配置文件路径,确保路径和你的系统一致autorestart=true:开启崩溃自动重启startretries:启动失败时最多重试3次user:用mongodb用户运行,和原systemd的配置保持一致,避免权限问题- 日志路径:指定日志文件位置,需要先确保目录存在且有写入权限:
sudo mkdir -p /var/log/mongod && sudo chown mongodb:mongodb /var/log/mongod
第三步:更新supervisord配置并启动mongod
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start mongod
验证效果:杀死mongod进程后,用supervisorctl status mongod查看状态,确认它自动重启了。
额外建议:优化MongoDB内存配置减少崩溃
除了配置自动重启,最好调整MongoDB的内存使用,从根源减少因内存压力崩溃的概率:
- 打开MongoDB的配置文件:
sudo nano /etc/mongod.conf - 找到
wiredTiger.engineConfig区块,设置合理的缓存大小,比如服务器内存的50%(假设服务器是8G内存,就设置cacheSizeGB: 4):wiredTiger: engineConfig: cacheSizeGB: 4 - 重启mongod让配置生效:
sudo systemctl restart mongod(如果用supervisord就用supervisorctl restart mongod)
内容的提问来源于stack exchange,提问作者Dev Sanghani
相关产品推荐
相关产品推荐

