У меня есть кластер kubernetes, и я запускаю один экземпляр mongodb как набор состояний. Я написал инструмент, который копирует некоторую коллекцию на удаленный mongodb (потому что у mongodb нет репликации коллекции). Я знаю mon go иногда может использовать слишком много памяти и освобождать ее, когда ей не нужна эта память. Я думаю, что для достижения этого выпуска используется своп (в кластере kubernetes своп всегда отключен). Но в кубернетах использование памяти mon go всегда растут, и это не освобождает память. Я устанавливаю ограничение памяти на 16 Ги, но нет никаких шансов. Я пытаюсь использовать ограничение wiredtiger до 4 Ги, но ничего не изменилось. Любая помощь будет оценена.
Когда я посмотрите mallo c, который он показывает (но внутри контейнера я вижу, что mongod использует память 7 Gi):
var mem = db.serverStatus().tcmalloc;
mem.tcmalloc.formattedString
------------------------------------------------
MALLOC: 3507618112 ( 3345.1 MiB) Bytes in use by application
MALLOC: + 636588032 ( 607.1 MiB) Bytes in page heap freelist
MALLOC: + 14434728 ( 13.8 MiB) Bytes in central cache freelist
MALLOC: + 2499328 ( 2.4 MiB) Bytes in transfer cache freelist
MALLOC: + 35990040 ( 34.3 MiB) Bytes in thread cache freelists
MALLOC: + 15204352 ( 14.5 MiB) Bytes in malloc metadata
MALLOC: ------------
MALLOC: = 4212334592 ( 4017.2 MiB) Actual memory used (physical + swap)
MALLOC: + 296247296 ( 282.5 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 4508581888 ( 4299.7 MiB) Virtual address space used
MALLOC:
MALLOC: 52538 Spans in use
MALLOC: 124 Thread heaps in use
MALLOC: 4096 Tcmalloc page size
------------------------------------------------
Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()).
Bytes released to the OS take up virtual address space but no physical memory.
Когда я смотрю на мониторинг, он дает мне все самые медленные запросы от моего инструмента репликации но когда я прекращаю репликацию, ситуация все та же, память растет. Также мой инструмент репликации использует mon go watch:
https://docs.mongodb.com/manual/reference/method/db.collection.watch/
https://docs.mongodb.com/manual/reference/method/Mongo.watch/