MongoDB内存不足

时间:2014-01-25 09:32:02

标签: mongodb azure out-of-memory swapfile

MongoDB崩溃了。当我打开mongodb.log文件时,我得到:

$ tail /var/log/mongodb/mongodb.log
Sat Jan 25 03:06:56.153 [initandlisten] connection accepted from 127.0.0.1:58492 #63331 (263 connections now open)
Sat Jan 25 03:07:02.694 out of memory, printing stack and exiting:
0xde05e1 0x6cf37e 0x12129fd 0xc490c3 0xc4404e 0xc44196 0xda4913 0xda53e4 0xe28e69 0x7f5cbaa19e9a 0x7f5cb9d2c3fd 
 /usr/bin/mongod(_ZN5mongo15printStackTraceERSo+0x21) [0xde05e1]
 /usr/bin/mongod(_ZN5mongo14my_new_handlerEv+0x3e) [0x6cf37e]
 /usr/bin/mongod(_Znam+0x6d) [0x12129fd]
 /usr/bin/mongod(_ZNK5mongo3Top8cloneMapERNS_9StringMapINS0_14CollectionDataEEE+0x83) [0xc490c3]
 /usr/bin/mongod(_ZN5mongo9Snapshots12takeSnapshotEv+0x4e) [0xc4404e]
 /usr/bin/mongod(_ZN5mongo14SnapshotThread3runEv+0x66) [0xc44196]
 /usr/bin/mongod(_ZN5mongo13BackgroundJob7jobBodyEN5boost10shared_ptrINS0_9JobStatusEEE+0xc3) [0xda4913]
 /usr/bin/mongod(_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf1IvN5mongo13BackgroundJobENS_10shared_ptrINS7_9JobStatusEEEEENS2_5list2INS2_5valueIPS7_EENSD_ISA_EEEEEEE3runEv+0x74) [0xda53e4]
 /usr/bin/mongod() [0xe28e69]
 /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a) [0x7f5cbaa19e9a]
 /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f5cb9d2c3fd]

这个问题听起来很相似:MongoDB: out of memory 但他的问题是一个极端问题。我的记忆设置已无限制。

其他人对.skip()或.limit()的特殊问题给出了不合理的大值,但这并没有发生在这里。

任何人都知道可能出现的问题?

1 个答案:

答案 0 :(得分:7)

MongoDB文档建议为MongoDB提供足够的交换空间,尽管它不是必需的:http://docs.mongodb.org/manual/administration/production-notes/#ProductionNotes-Swap

我正在使用Windows Azure托管,我发现他们的虚拟服务器默认没有交换空间:

$ sudo swapon -s
Filename                Type        Size    Used    Priority

(Azure默认为无交换空间:Part 1& Part 2

所以我找到了创建交换文件的指南:https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04

它解决了我的问题!

注意:

  1. 指南说Ubuntu 12.04,但同样的步骤适用于13.10。
  2. 您应该使用大约是RAM大小一半的交换文件,而不是指南中使用的512MB。
  3. 我希望这有助于其他人解决这个问题。