一 问题描述
11月19日中午同事反馈,mongo业务受影响,当时排查,发现shard3被宕掉了两个进程,shard2被宕掉了一个进程。
当时通过启动进程恢复了业务。
后听同事说11月20日上午mongo又发生了异常宕机的问题,通过临时启动mongo进程恢复了业务。
二 排查思路 2.1 查看11月20日哪个mongo进程宕机了#这里通过mongo的启动日期判断
?发现11月20日宕掉了两个shard2,1个shard3。
2.2 查看宕机节点的日志是否有相关报错cd /data/mongo/shard2
less shard2.log
发现并未有相关报错。
2.3 查看systemctl启动日志执行journalctl -u mongod_shard2
可以看到mongod_shard2是被killed掉的:
mongod_shard2.service: main process exited, code=killed, status=9/KILL
2.4 使用dmesg查看mongo的信息[5872527.013380] Out of memory: Kill process 31447 (mongod) score 531 or sacrifice child
[5872527.013591] Killed process 31447 (mongod) total-vm:13026860kB, anon-rss:9221132kB, file-rss:0kB, shmem-rss:0kB
?可以看到是操作系统内存不足,导致mongo被killed掉了。
当内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。
三 解决办法① 增大服务器内存,增大swap
由于服务器内存不足,这里选择增大交换内存。
扩交换内存可参考:
Linux系统怎么调整swap分区大小_雅冰石的专栏-CSDN博客_linux调整swap大小
② 设置mongo被杀掉后自动重启
虽治标不治本,但至少减少点儿业务影响。
vi?/usr/lib/systemd/system/mongod_shard1.service
在[Service]下添加:
Restart=on-abort
RestartSec=5s
修改后示例:
[Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongo Group=mongo Environment="OPTIONS=-f /data/mongo/conf/mongod_shard1.conf" ExecStart=/usr/local/mongo/bin/mongod $OPTIONS PermissionsStartOnly=true #PIDFile=/data/mongo/shard1/mongod.pid Type=forking # file size LimitFSIZE=infinity # cpu time LimitCPU=infinity # virtual memory size LimitAS=infinity # open files LimitNOFILE=64000 # processes/threads LimitNPROC=64000 # locked memory LimitMEMLOCK=infinity # total threads (user+kernel) TasksMax=infinity TasksAccounting=false # Recommended limits for for mongod as specified in # http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings Restart=on-abort RestartSec=5s [Install] WantedBy=multi-user.target#加载配置
systemctl daemon-reload
③?监控内存使用率
当发现服务器内存使用率较高,可通过重启较耗内存的mongo进程释放内存。
缺点:
治标不治本。
--本篇文章参考了:
MongoDB killed by linux - Stack Overflow
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |
标签: #main #process #exited #codekilled #status9KILL