контейнерах. Есть приложение которое активно работает с Elasticsearch, в памяти ничего не хранит, получило данные, обработало, отдало. При запуске локально Оно жрет примерно 500 мб под нагрузкой и прекрасно освобождает память, когда нагрузка падает, но как только я засовываю его в контейнер оно начинает жрать всю доступную память гигабайтами и не отпускает память даже после часа простоя без нагрузки. Может нужно как то хитро конфигурировать .net или в чем может быть причина?
потому что любой нормальный рантайм в контейнере понимает что он в контейнере и жрёт всё сразу
Лимиты на контейнер установить нужно
да, лимиты я поставил, это помогло, но мне бы хотелось услышать какие то обоснования что это правильный подход, а не то что я криворукий и чего то не понимаю
Ты криворукий. Читай доку про gc. Так норм? :)
ну почти, а ссылку можно? Я не нашел
придумай причину зачем дотнету освобождать память в КОНТЕЙНЕРЕ
а откуда понятно что память именно жрётся? оом были?
я не понимаю вопроса... А почему он не должен?
хоцца чтобы память не жрало почём зря
https://devblogs.microsoft.com/dotnet/running-with-server-gc-in-a-small-container-scenario-part-0/
Свободная память используется ос для кэшей фс, если апа активно работает с локальными файлами то это нужно
Ради интереса решил подключить профилировщик к сервису внутри контейнера по этой инструкции https://www.jetbrains.com/help/dotmemory/Profile_Application_in_Docker_Container.html И внезапно он перестал жрать память. Если профилировщик отключить, то процесс начинает снова жрать память. Решил вместо подключений профилировщика сделать снапшот и увидел что по какой то причине выделено куча неуправляемой памяти. Почему при подключённом профилировщике используется меньше неуправляемой памяти?
Обсуждают сегодня