2009-08-01 2 views
2

Есть ли способ/инструмент для профилирования использования памяти в сеансе в веб-приложении Java?Как профилировать использование памяти сеанса в веб-приложении Java/Seam?

Более конкретно, я использую Seam, и у меня есть несколько объектов, которые специфичны для пользователя или для текущего сеанса пользователя, поэтому они должны быть сохранены в сеансе пользователя.

Некоторое время назад у моего приложения не хватило памяти при попадании определенного количества пользователей, поэтому я переместил разные вещи из сеанса и профилировал, пока не потерял память. Однако измерения памяти были на уровне JVM. Мне бы очень хотелось отслеживать использование памяти на уровне сеанса, исключая использование несезонной памяти.

Приятно иметь:

  • Общего использование памяти для HTTP сессий (которые я могу сравнить с целым использованием памяти приложения)
  • односеансовые использованием памяти, даже среднего.

ответ

1

Я использую Eclipse Mat для диагностики подобных проблем. Если у вас большие сеансы, диспетчер сеансов отображается в отчете «Дерево Доминиров». Вы можете легко отличить использование общей памяти от сеансов и других частей приложения.

Вы можете развернуть отдельные сеансы и посмотреть, сколько памяти используется каждым. Вы также можете открыть каждый отдельный сеанс и проверить каждый объект в сеансе.

Также неплохо рассмотреть другие отчеты, которые предоставляет MAT. Иногда результаты удивляют - например, у нас была проблема с использованием памяти, которая оказалась проблемой загрузчика классов JRE.