Каковы возможные причины утечки памяти в Kubernetes приложений .Net?
Доброго времени суток!
Есть приложения, написанные на .Net core. Запущенные в Docker, они работают нормально. Но на другом сервере, будучи запущенными через Kubernetes, наблюдается такое странное поведение: после перезагрузки dev-сервера, суммарно занятая память составляет около 3 Гб из 6. Со временем, когда происходит деплой, занятая память (именно занятая, не буфер/кэш) растёт, и растёт до тех пор, пока не займёт все 6 Гб, после чего приходит OOM-killer и прочие радости отказа вплоть до перезагрузки. Перезапуск подов, кластера, докера не помогает. Память как будто скушана чем-то. При этом, если просуммировать память, занятую приложениями, то сумма выходит в районе 3 Гб. Куда может "утекать" "занятая" память?
Kubernetes 1.17, Docker 19.03, ядро 4.18
изначально версии Docker были одинаковые - 18.03. грешил на проблему работы с cgroup и обновил версию - не помогло. Dockerfile тот же.
обычный htop - в нем видно заполнение памяти. через ps либо /proc/ID/status суммирование использованной памяти со временем перестает соответствовать количеству, которое выводит htop. да даже если бегло посмотреть на столбец RES в htop, видно несоответствие.
на скрине - аптайм 6 суток и спустя несколько деплоев. суммарно занятая память не достигает и 3 Гб, но фактически занято уже чуть больше 4 Гб. спустя 1-2 недели память будет занята полностью.
Я наверно не так понял вначале - думал что внутри контейнера память пропадает.
А на самом деле это host машина на которой бежит K8S, и на этой машине исчезает память?
спасибо за ответ, но вряд ли это поможет, поскольку я пробовал останавливать все поды, но память при этом не возвращалась в полной мере. т.е. высвобождалась только занятая подами, а вот неизвестно кем "съеденная" так и оставалась без высвобождения
А если остановить весь K8S и dockerd?
Посколько я никогда не видел такой проблемы в "обычном" линуксе, мне кажется что странности с памятью связаны с K8S\dockerd.