Значение RSS процесса Java внутри контейнера Docker - PullRequest
0 голосов
/ 11 декабря 2018

Я пытался выяснить, сколько памяти занимает приложение Spring Boot, и я хотел сравнить результат с контейнером Docker, на котором запущено то же приложение Spring Boot.Для этого я взял приложение PetClinic и добавил в него Dockerfile.Вот проект с моими тестами: https://github.com/wearearima/spring-boot-docker-study

Сначала, используя JConsole, я проверил использование кучи после запуска сборщика мусора, и результат составил 45 МБ.Однако, учитывая, что приложение Java потребляет больше памяти, чем куча (например, метасреда, кэш кода и пространство классов), я использовал команду ps au $(pid), чтобы получить память, используемую процессом Java.В выводе этой команды указано, что значение RSS составляет 60 МБ, поэтому я предполагаю, что приложение Spring Boot потребляет 60 МБ памяти.

После этого я запустил то же приложение в контейнере Docker и выполнил команду docker exec ps 1 -o rss, чтобы получить значение RSS внутри контейнера.Удивительно, но результат составил 520 МБ.

Я не понимаю, почему команда ps дает разные результаты внутри и снаружи контейнера.Если процесс будет таким же, я ожидаю получить аналогичный результат.Однако между обоими результатами, 60 МБ и 520 МБ, разница огромна.

Есть кое-что, что я неправильно понял, но я не знаю что.Может быть, значение RSS - это память, используемая процессом, которая не используется другими процессами?И поскольку процесс java внутри контейнера изолирован и ничего не разделяет, значение RSS выше?

Буду признателен за любую помощь: -)

...