irpas技术客

mongod_shard2.service: main process exited, code=killed, status=9/KILL_雅冰石

irpas 4673

一 问题描述

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