Я столкнулся с интересной проблемой, пытаясь проанализировать потребление памяти в моем Java-приложении, работающем в Docker-контейнере в сравнении с хост-машиной.
- Java-приложение - это веб-приложение на сервере Jetty 9.4.9
- Java-версия: 1.8
- Хост: MAC
- Образы докера: jetty: 9.4-jre8
- Демон docker - версия 18.03.1-ce.
На хосте я использую инструмент Yourkit для анализа потребления памяти.
Для контейнера Docker docker stats <docker id/name>
То, что я получаю, это то, что на MAC yourkitпоказывает мне 50M Размер без кучи + ~ 40M размер кучи, всего ~ 100M
Принимая во внимание, когда я развертываю иведите ту же войну с контейнером, статистика показывает мне 200M
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
879fb113ca8d jetty-app 0.19% 214.6MiB / 1.952GiB 10.74% 1.49MB / 88.9kB 31.7MB / 6.42MB 29
Может кто-нибудь пролить свет на это явление?
Предполагая, что stats
дает неправильные результаты, я пытался ограничить память в контейнере, используя флаг --memory
, это мало помогает, я получаю OOM.
Заранее спасибо