MongoDB内存溢出

6

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类似,但他的问题是ulimit问题。我的内存设置已经是无限制的。

其他人可能会因为.skip()或.limit()给出了不合理的大值而出现特定问题,但这里并没有发生。

有人知道可能出了什么问题吗?

1个回答

7

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

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

$ sudo swapon -s
Filename                Type        Size    Used    Priority

(Azure默认没有交换空间:第1部分第2部分)。
所以我找到了一个创建交换文件的指南:https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04 这解决了我的问题!
注:
  1. 该指南适用于Ubuntu 12.04,但是同样的步骤在13.10上也适用。
  2. 您应该使用大约为RAM大小一半的交换文件,而不是指南中使用的512MB。
希望这可以帮助其他人解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接