Я пытался выяснить, сколько памяти занимает приложение 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 выше?
Буду признателен за любую помощь: -)