visualvm контролирует использование памяти - PullRequest
0 голосов
/ 26 октября 2010

в моем запуске tomcat я устанавливаю -xms, -xmx на 1 ГБ.Внутри visualvm, когда я наблюдаю за памятью

  1. , когда я делаю выборку из памяти, он не показывает точное использование памяти до тех пор, пока я не нажму «снимок», а затем классы Java, использующие память, показывающуюправильные шаблоны и количество экземпляров.почему, как это?

  2. также, когда я устанавливаю память tomcat в 1 Гб, память продолжает увеличиваться и увеличивается до 960 Мб.пока я не нажму "execute gc" и память не вернется к 200 МБ.

  3. Как вы думаете, нужно ли создавать планировщик для принудительного нажатия кнопки execute.gc () на jvm, каждый день в полночь?

любые комментарии из моего описания

VisualVM screenshot

1 Ответ

1 голос
/ 26 октября 2010

Я полагаю, что вы видите здесь, что параллельный сборщик мусора выполняет очистку молодого поколения, но куча постоянно перемешивается, поэтому он не может получить все ссылки на коллекцию старого поколения. Когда вы нажимаете кнопку «Выполнить сборщик мусора», вы создаете коллекцию «останови мир», которая блокирует все потоки, замораживает кучу и позволяет создать намного большую коллекцию. Моя главная проблема здесь - возникает ли когда-либо большая коллекция (через x часов)? Вы видите ошибки OutOfMemory с меньшей кучей?

1) У вас включена кнопка автообновления? Также может быть, что профилировщик делает небольшой GC (пространство Eden) перед тем, как сделать снимок.

2) Это совершенно нормально. Сборка мусора требует времени и ресурсов (процессорные циклы). Если вы установили кучу большого размера, она будет ждать, пока не достигнет некоторого процента от нее, до запуска самой сборки мусора. Я думаю, что соотношение свободного пространства и живого объекта по умолчанию составляет от 40% до 70%. Я знаю, что tomcat определенно изменил способ сборки мусора в версии 5, у tomcat v4 были проблемы с производительностью, потому что он потратил много времени на работу сборщика мусора. Возможно, вы захотите провести здесь какое-то исследование и посмотреть, есть ли у tomcat собственные параметры сборки мусора.

3) Нет. Почти полная куча - это то, к чему вы стремитесь. Возможно, имеет смысл уменьшить размер кучи, чтобы полная сборка мусора не заняла так много времени. Это компромисс между множеством сборщиков мусора (паузы) и длительными сборками мусора (длинные паузы). Каждое приложение отличается, поэтому я обычно начинаю с настроек по умолчанию и настраиваю их по мере необходимости. Есть много вариантов для сборки мусора (и альтернативных сборщиков), если вам интересно.

Java 5

Java 6 FAQ , Технический документ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...