Проблема памяти Tomcat - PullRequest
       20

Проблема памяти Tomcat

2 голосов
/ 07 января 2011

Я заметил, что мое приложение, которое работает на Tomcat 5, запускается с 1 гигабайта памяти и, как только оно начинает получать запросы от клиента, память начинает падать до тех пор, пока не достигнет 100 МБ, и оттуда не начнутся проблемы. Я смотрю на / manager / страницу состояния tomcat в разделе JVM, где перечислены «Свободная память», «Общая память», «Макс. Память».

Это индикатор утечки памяти? Кажется, память не освобождается автоматически, даже если нет запросов от клиентских компьютеров.

Ответы [ 4 ]

1 голос
/ 10 января 2011

Сначала вы должны проанализировать вашу деятельность по сбору мусора и понять поведение GC (шаблон пилообразного сигнала).Вот объяснение операторов GC .

Если вы получаете нежелательные длинные паузы GC, вам следует попробовать GC tuning .

Если у вас возникли ошибки OutOfMemory, вам следует перейти к Обнаружение утечки памяти .

0 голосов
/ 10 января 2011

Вместо того, чтобы проверять кодирование в поисках стандартных шаблонов утечек, лучше всего включить ведение журнала GC, а затем запустить такой инструмент, как HP Jmeter, для этих журналов.

Инструкции по использованию JMeter можно найти здесь: http://www.javaperformancetuning.com/tools/hpjmeter/index.shtml#howto

Один общий шаблон, который нужно искать при анализе журналов ГХ, - это объект, который живет в нескольких поколениях.В обычной (непротекающей) java-программе вы обнаружите, что объекты являются либо недолговечными, либо долгоживущими, что означает, что они создаются и уничтожаются быстро или существуют в течение всего времени работы приложения.Если объект недолговечный, он будет существовать только в течение небольшого стабильного числа поколений.Если объект долгоживущий, его возраст будет увеличиваться при запуске программы.Но это будет принадлежать только ограниченному числу поколений.Если вы найдете объект, имеющий несколько экземпляров с разным возрастом и возрастанием количества поколений, то, скорее всего, объект просочился.Для более подробного объяснения взгляните на эту презентацию: http://www.hjug.org/present/Sporar-MemoryLeaks.pdf

После того, как вы определили свой негерметичный объект, следующим шагом будет анализ кучи, чтобы увидеть, кто содержит ссылки на просочившийся объект.Оттуда проблема должна быть действительно легко идентифицируемой

0 голосов
/ 07 января 2011

Вы делаете что-то в своем статическом блоке и не используете объекты?Что произойдет, если вы просто запустите сервер, который будет работать некоторое время, а затем запустите браузер?если есть неиспользованные объекты и если GC запустился, объем доступной памяти должен увеличиться. Это может не решить вашу проблему, но вы можете сузить круг.

0 голосов
/ 07 января 2011

Включите JMX на вашем коте и следите за ним с помощью какого-либо профилировщика.Как Jconsole или visualvm.Если тенденция показывает, что использование кучи быстро увеличивается с течением времени, возможно, произошла утечка памяти.Проверьте загруженные классы, и вы сможете выяснить, что приводит к этой проблеме.

Кроме того, ваш вопрос недостаточно ясен.Что именно вы подразумеваете под «падением памяти»?ты имеешь в виду свободную память уменьшает?

...