小内存虚拟机中使用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 运行正常,不再异常退出。