小内存虚拟机中使用MongoDB数据库

目录

在1核1GB的阿里云云虚拟机中使用MongoDB数据库

问题

最近我在阿里云虚拟机上运行的MongoDB服务器经常崩溃。从 systemctl status 的输出看,mongod 进程被 kill 掉。

mongod.service 的日志显示进程的详细情况。

可以看到 mongod 运行不到一天就被 kill 掉了。
再查看 MongoDB 的日志 mongod.log,省略部分信息。

上面日志没有除了服务响应慢外,没有出错信息。找不到mongod服务为啥会崩溃。
日志中都没记录,说明可能是系统将 MongDB 杀掉了。
查看 systemd 的日志 /var/log/message,找到下面的条目

可以确定,因为占用内存过高,系统将 MongoDB 服务杀掉(oom-killer)。

原因探究

不知道为什么 MongoDB 会占用这么高的内存,mongostat 的输出

top 中 mongod 的输出显示,mongod 占了近一半的内存。

需要增加内存容量。但阿里云虚拟机的内存太贵,可以尝试增加交换空间。

解决办法

阿里云虚拟机默认没有设置交换空间。

最简便的方式之一就是创建一个交换文件,将其设为swap。
创建512MB的空白文件

设置该文件为交换文件

启动交换分区

在系统启动时自动加载,在/etc/fstab中加入

这样就加入一个交换分区。

后续

后面将持续观察 mongod.service 的运行情况,验证该方法是否有效。
2016.11.10:经过3个月实际运行测试,上述方法有效。添加交换分区后,mongod.service 运行正常,不再异常退出。