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() из-за неоправданно больших значений, но здесь этого не происходит.
Кто-нибудь знает, что может быть не так?
1 ответ
Документы MongoDB рекомендуют иметь достаточно места подкачки для MongoDB, несмотря на то, что это не является обязательным требованием: http://docs.mongodb.org/manual/administration/production-notes/
Я использую хостинг 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
И это решило мою проблему!
Заметки:
- В руководстве написано Ubuntu 12.04, но те же шаги у меня сработали 13.10.
- Вы должны использовать файл подкачки примерно в два раза меньше вашей оперативной памяти, а не 512 МБ, используемых в руководстве.
Я надеюсь, что это помогает другим решить эту проблему.