Mongodb использует файл с памятью, когда я использую долгое время, я вижу, что свободная память оставила меньше командой "free -m" в ubuntu, и кеширование много использует. Тогда убить монгодба, кеширование все еще стоит много? как я могу освободить кеширование?
Как освободить кеширование, которое используется Mongodb?
Ответ 1
MongoDB (по крайней мере, похоже) будет использовать много доступной памяти, но фактически он перейдет к OS VMM, чтобы сообщить ему о выпуске памяти (см. Caching в документах MongoDB.)
Вы должны иметь возможность выпускать любую память, перезагружая MongoDB.
Однако, в некоторой степени MongoDB на самом деле не "использует" память.
Например, из документов MongoDB Проверка использования памяти сервера...
В зависимости от платформы вы можете видеть отображенные файлы как память в процесс, но это не строго верный. Верх Unix может показать путь больше памяти для монгода, чем на самом деле подходящее. Операционная система ( менеджер виртуальной памяти, в зависимости от ОС) управляет памятью где "Файлы с памятью", проживают. Это число обычно отображается в программе типа "free -lmt".
Он называется "кэшированной" памятью.
MongoDB использует LRU (Least Recent Used) алгоритм кеша, чтобы определить, какие "страницы" будут выпущены, вы найдете дополнительную информацию в эти два вопроса...
Ответ 2
Начиная с 3.2, MongoDB использует WiredTiger в качестве механизма хранения по умолчанию. В предыдущих версиях MMAPv1 использовался как механизм хранения по умолчанию.
С помощью WiredTiger MongoDB использует как внутренний кеш WiredTiger, так и кеш файловой системы. В MongoDB 3.2 внутренний кеш WiredTiger по умолчанию будет использовать больше: 60% оперативной памяти минус 1 ГБ или 1 ГБ. Для систем с ОЗУ до 10 ГБ новый параметр по умолчанию меньше или равен настройке по умолчанию 3.0 (для MongoDB 3.0 внутренний кеш WiredTiger использует либо 1 ГБ, либо половину установленной физической памяти, в зависимости от того, что больше). Для систем с более чем 10 ГБ ОЗУ новый параметр по умолчанию больше, чем параметр 3.0.
чтобы ограничить проводной кэшированный кеш Добавьте следующую строку в файл .config:
wiredTigerCacheSizeGB = 1
Ответ 3
В чем была моя проблема:
Поскольку приложение было развернуто на машине с очень длительного времени и никаких исторических данных не было удалено, что привело к увеличению размера базы данных, используемой с приложением. Mongodb занимает почти вдвое больше доступных данных в ОЗУ, что не оставляло свободной памяти для запуска приложения.
Состояние памяти перед удалением данных:
[root @ip-172-31-1-173 logs] # free -m общий доступный общий доступный кэш/кеш Мем: 15630 11462 146 732 4021 3207 Обмен: 0 0 0
Состояние памяти после удаления данных:
[root @ip-172-31-1-173 mongo] # free -m общий доступный общий доступный кэш/кеш Mem: 15630 5849 5234 788 4545 8763 Обмен: 0 0 0
С WiredTiger MongoDB использует как внутренний кеш WiredTiger, так и кеш файловой системы.
Изменено в версии 3.2: начиная с MongoDB 3.2, внутренний кеш WiredTiger по умолчанию будет использовать больше:
60% of RAM minus 1 GB, or
1 GB.
Для систем с ОЗУ до 10 ГБ новый параметр по умолчанию меньше или равен настройке по умолчанию 3.0 (для MongoDB 3.0 внутренний кеш WiredTiger использует либо 1 ГБ, либо половину установленной физической памяти, в зависимости от того, больше).
Для систем с более чем 10 ГБ ОЗУ новая настройка по умолчанию больше, чем настройка 3.0.
Через кэш файловой системы MongoDB автоматически использует всю свободную память, которая не используется кешем WiredTiger или другими процессами. Данные в кеше файловой системы сжимаются.
Вам также необходимо восстановить базу данных при очистке своих исторических данных для поддержания размера используемого кеша.