Пн go в Кубернетесе растет использование памяти - PullRequest
1 голос
/ 13 февраля 2020

У меня есть кластер 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/

...