MongoDB не хватает памяти

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: нехватка памяти Но его проблема заключалась в проблеме с ulimit. У меня настройки памяти уже безлимитные.

У других были особые проблемы с .skip() или .limit() с неоправданно большими значениями, но здесь этого не происходит.

Кто-нибудь знает, что может быть не так?


person Erik Buchanan    schedule 25.01.2014    source источник


Ответы (1)


Документы 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. Вы должны использовать файл подкачки размером примерно в половину размера вашей оперативной памяти, а не 512 МБ, как указано в руководстве.

Я надеюсь, что это поможет другим решить эту проблему.

person Erik Buchanan    schedule 25.01.2014