Автор Тема: MongoDB и рост используемой памяти.  (Прочитано 8475 раз)

Оффлайн crazygoogle

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 959
  • Рейтинг: 103
  • Nodejs Evangelist
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #30 : Июль 02, 2012, 21:19:16 »
Помоему монга даже без индексов кеширует результаты запросов. Это может обьяснить рост в потребностях памяти.
Но опять же, чем это вас смущает ? Шаред мемори это еще не память, если она будет нужна другому процессу, то ядро ее отберет у монги. Или я путаю ?
Мы написали про проблему, но совсем не указали каким образом используется монга. Если у вас терабайты доков, а вы делаете выборку по регекспам, или у вас индексы на тексты, то не странно что монге нужно больше чем 20Мб.
Если вы ищете простые решения кей-стор которые умещаются хранятся на диске и умеют полнотекстный поиск то есть решения и попроще. Но и результат соотвественно придется ждать долго. Как и с монгой, если заставить ее делать все на диске. Чудес в общем-то монга не приносит.
Если не сложно расскажите как именно распределяется нагрузка на монгодб и чего вы от нее ждете.

Оффлайн crazygoogle

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 959
  • Рейтинг: 103
  • Nodejs Evangelist
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #31 : Июль 02, 2012, 21:36:12 »
Может у вас разные версии лунксов на разных машинах. Но новой у вас мапед мемори считается в РСС память, а на прежней - не считалось.

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #32 : Июль 02, 2012, 22:08:04 »
Помоему монга даже без индексов кеширует результаты запросов. Это может обьяснить рост в потребностях памяти.
Но опять же, чем это вас смущает ?
Кстати, действительно ситуация наверное в этом. Значит старая версия кешировала немного по другому (или быстрее высвобождала)
Самое интересное что все запросы у меня по индексу должны выполняться, но видать из-за того что индекс не полностью в память помещается (сужу по serverStatus-у монги) некоторые запросы всетаки без индекса и они наверное попадают в кеш.
И тогда понятна ситуация что расход памяти со временем начинает рости быстрее (сначала очень медленно, когда перевалит за 100метров начинает есть как не в себя - за полчаса до 200метров), т.е. чем польше памяти уходит на кеш запросов - меньше памяти остается под индексы и следовательно запросы чаще происходят не по индексу.
В старой версии монги видать немного другой алгоритм кеширования зщапросов.

Т.к. настроить время кеша запросов точно не получится, то придется пробовать монгу 1.8.5 (основная проблема перекодировать базу в старый формат).

P.S. База простая - 2.4 млн документов с 2мя индексами кроме id (один составной из 2-х полей)

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #33 : Июль 02, 2012, 22:23:19 »
Хотя везде в доках написано что нет Query Cache у монги, поэтому отключить его нельзя.
Только вот практика доказывает обратное... Если запускать сложный запрос затрагивающий сильно разбросанные по диску данные, то в первый раз будет долго считать, а второй отдаст почти моментально, зато размер потребляемой памяти монгой увеличится значительно
« Последнее редактирование: Июль 02, 2012, 22:24:54 от Yoskaldyr »

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #34 : Июль 02, 2012, 22:30:50 »
И судя по тикетам мемори ликов точно такая же проблема не только у меня, и решение пока только такое же как у меня - рестрат сервиса по крону, правда там перегружают только раз в сутки (просто памяти на сервере значительно больше)

https://jira.mongodb.org/browse/SERVER-5356

а вот еще утечки - типа пишут small, но на длительной работе тоже может вылезти боком (у меня как раз открываются закрываются базы довольно активно при запросах на чтение)
https://jira.mongodb.org/browse/SERVER-2498
« Последнее редактирование: Июль 02, 2012, 22:35:06 от Yoskaldyr »

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #35 : Июль 03, 2012, 02:14:12 »
Нашел на другом своем сервер монгу 2.0.2 - поставил только бинарник - утечки прекратились. За 2 часа RES ни разу не поднимался выше 30М, в среднем порядка 20М
Значит точно что-то в последних билдах не то.

Оффлайн Sannis

  • Sr. Member
  • ****
  • Сообщений: 380
  • Рейтинг: 27
    • Sannis@Github
    • Просмотр профиля
    • http://sannis.ru
Re: MongoDB и рост используемой памяти.
« Ответ #36 : Июль 03, 2012, 21:10:42 »
Хотя везде в доках написано что нет Query Cache у монги, поэтому отключить его нельзя.
Только вот практика доказывает обратное... Если запускать сложный запрос затрагивающий сильно разбросанные по диску данные, то в первый раз будет долго считать, а второй отдаст почти моментально, зато размер потребляемой памяти монгой увеличится значительно
Это обычный эффект из-за файлового кеша в памяти, севершенно не обязательно из-за того что Монга специально результаты кеширует.

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #37 : Июль 03, 2012, 22:31:28 »
Это обычный эффект из-за файлового кеша в памяти, севершенно не обязательно из-за того что Монга специально результаты кеширует.
файловый кеш не в RES ;)
И я смотрел через mongostat где идет расход - постепенно растет heap как следствие растет и объем используемой памяти.

Оффлайн crazygoogle

  • Global Moderator
  • Hero Member
  • *****
  • Сообщений: 959
  • Рейтинг: 103
  • Nodejs Evangelist
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #38 : Июль 04, 2012, 12:11:19 »
файловый кеш не в RES ;)
Так вот и я о том. В РЕС вроде не должно включать mmaped files, или должно ? Если РЕС постоянно ростет и со временем у системы нет памяти для других процессов, значит всетаки у вас где-то течёт. А то что монге много памяти надо - это ок.

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #39 : Июль 04, 2012, 14:50:34 »
Если РЕС постоянно ростет и со временем у системы нет памяти для других процессов, значит всетаки у вас где-то течёт.
К этому тоже пришел. Учитвая что откат на старую версию помог по большей части (теперь только раз в сутки рестарт делать надо). Да и учитывая что точная такая проблема как у меня описана в тикетах на сайте монги (может потом пофиксят в следующей версии)
А то что монге много памяти надо - это ок.
С этим я не спорю :)

Оффлайн Vitaly

  • Hero Member
  • *****
  • Сообщений: 1013
  • Рейтинг: 76
    • nodeca@Github
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #40 : Июль 10, 2012, 20:27:38 »
Как оно там отстоялось? Трабл именно в версии монги или что-то изменилось за несколько дней? Почему рестарт все равно делать надо?

Может просто в монге минимальные требования к памяти изменились? Например как в ноде - у 0.8 ветки после старта около 50 метров надо (подскакивает до 100, потом быстро сдувается). В 0.6 было около 30.

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #41 : Июль 11, 2012, 01:44:16 »
Как оно там отстоялось? Трабл именно в версии монги или что-то изменилось за несколько дней? Почему рестарт все равно делать надо?

Может просто в монге минимальные требования к памяти изменились? Например как в ноде - у 0.8 ветки после старта около 50 метров надо (подскакивает до 100, потом быстро сдувается). В 0.6 было около 30.
переехал на выделенный сервак ибо наши вдс хостеры достали по самое нехочу своим "супер" качеством услуг.
Теперь сравнение будет не совсем адекватным, т.к. памяти значительно больше и ядро совсем другое, вернее даже  система: вместо CentOs 5 - Oracle Linux 6 :)
Пока что даже намека на утечку нет.
может действительно начинает течь т.к. изменились минимальные требования по памяти (не знаю может запихну монгу в легкий контейнер чтобы не ела всю оперативу) Или колбасит с конкретными ядрами (типа 5-й centos)

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #42 : Июль 11, 2012, 01:47:08 »
Не, рано я похвалил сэмулировал поведение пользователей на страницах - та же самая фигня - RES растет и не отдает.
Значит будет перезагрузка :)

Оффлайн Yoskaldyr

  • Sr. Member
  • ****
  • Сообщений: 378
  • Рейтинг: 7
    • Просмотр профиля
Re: MongoDB и рост используемой памяти.
« Ответ #43 : Июль 11, 2012, 12:02:29 »
Решил проверить на реальных пользователях без перезагрузки.
Утечка происходит именно в момент чтения, а не записи. Т.к. пока обновлялись днс и на сайте вообще не было пользователей, т.е. не было активного чтения базы, но работал парсинг, который читает совсем немного, но активно пишет в базу, проработал всю ночь и RES осталось в районе 20 метров. Только появились пользователи - RES опять полез вверх :(

Значит оставляю перезагрузку сервиса по крону...

Оффлайн Sannis

  • Sr. Member
  • ****
  • Сообщений: 380
  • Рейтинг: 27
    • Sannis@Github
    • Просмотр профиля
    • http://sannis.ru
Re: MongoDB и рост используемой памяти.
« Ответ #44 : Июль 11, 2012, 14:39:03 »
Я всё не пойму, чем же большой RSS вам мешает. Если Монга забрала всю  не занятую память, что в этом плохого?

А утечки вроде как можно проверить так: http://www.mongodb.org/display/DOCS/The+Linux+Out+of+Memory+OOM+Killer
« Последнее редактирование: Июль 11, 2012, 14:41:03 от Sannis »