Анализ управления памятью

Я делаю анализ управления памятью для своего веб-приложения Java,

Перед запуском моего кота свободная память в ОЗУ составляла около 595 МБ. После запуска сервера свободная память увеличилась до 151 МБ. Когда я снял дамп кучи, объекты занимали 262 МБ.

Так займет ли только Tomcat оставшиеся 181 МБ?

Другой вопрос, я провел нагрузочный тест с 500 пользователями. Свободной памяти становится 8 МБ. Когда я сделал здесь дамп кучи, это было около 265 МБ. Итак, свободное место 151 МБ уменьшилось до 8 МБ, в чем может быть причина

Обратите внимание, что я использовал команду top для проверки свободной памяти в оперативной памяти.


person Selvakumar Ponnusamy    schedule 28.02.2012    source источник


Ответы (2)


Свободная память — это память, не используемая ядром, программами или дисковым кешем. Насколько велик дисковый кеш, зависит от того, к каким файлам вы обращались или удаляли, и является плохим показателем потребления памяти.

Java использует довольно много памяти при запуске. Многое из этого является общим. Tomcat может быть относительно сложным приложением в зависимости от того, что вы загружаете, но использование 181 МБ для JVM и Tomcat кажется мне разумным.

person Peter Lawrey    schedule 28.02.2012
comment
Спасибо, Питер. Что касается моего второго вопроса, во время нагрузочного теста свободной памяти становится очень мало, но когда я делаю дамп кучи, я не вижу большой разницы в размере при сравнении до нагрузочного теста и во время нагрузочного теста. в чем может быть причина нехватки памяти во время нагрузочного теста? - person Selvakumar Ponnusamy; 28.02.2012
comment
Вы делали дамп во время нагрузочного теста или после нагрузочного теста? Если вы сравниваете до и после теста, вы ожидаете, что он будет почти таким же, если у вас нет утечки памяти. - person Peter Lawrey; 28.02.2012
comment
JVM может использовать больше памяти, чем она использовала бы после полной очистки. Я бы использовал VisualVM, чтобы запустить полный сборщик мусора и посмотреть, сколько он использует сразу после очистки. Это даст вам лучшее представление о том, сколько требуется и сколько зарезервировано, но не живых объектов. - person Peter Lawrey; 28.02.2012

Все зависит от того, как вы вычисляете свободную память (Profiler? TaskManager? Программно?) и какую память вы оцениваете (куча? не-куча? и т. д.). Tomcat сам по себе не занимает много памяти (я не точно напомню, но базовая установка точно не должна занимать 180Мб)

person Guillaume Polet    schedule 28.02.2012
comment
хорошо, это, вероятно, не лучший подход для вычисления фактической занимаемой памяти. Но что более важно, куча — это растущая память: она начинается с минимального объема памяти, а затем каждый раз, когда ей требуется больше памяти, чем доступно в данный момент, она увеличивает выделенную память (пока не достигнет максимума). Это означает, что ваш объект может занимать 100 МБ, но куча может использовать 128 МБ. Там у вас есть 28Mb неиспользованными. Вероятно, вам следует больше узнать о памяти Java и сборщике мусора Java. - person Guillaume Polet; 28.02.2012