Как исследовать чрезмерную сборку мусора Java - PullRequest
6 голосов
/ 03 июля 2010

У меня есть экземпляр Tomcat, который демонстрирует следующее поведение:

  • Примите один http-запрос на вход.
  • Выполните один запрос к внутреннему серверу и получите около 400 КБ XML.
  • Пройдите через этот XML и преобразуйте его в 400 Кбайт JSON.
  • Возвращает ответ JSON.

Проблема заключается в том, что при обработке запроса 400 Кб мое веб-приложение генерирует около 100 МБ мусора, который заполняет пространство Eden и запускает молодое поколениеколлекция.

Я пытался использовать встроенную функцию java hprof для профилирования сайтов распределения, но Tomcat, похоже, не запустился должным образом с этим на месте.Вполне возможно, что мне немного не терпелось, поскольку я представляю, что профилирование выделения памяти связано с большими накладными расходами, и поэтому запуск tomcat может занять много времени

Какие инструменты лучше всего использовать для профилирования памяти Java очень молодого возрастаобъекты / мусор?Я не могу использовать дампы кучи, потому что объекты, которые меня интересуют, являются мусором.

Ответы [ 5 ]

2 голосов
/ 04 июля 2010

Что касается актуальной проблемы: при использовании синтаксического анализатора на основе DOM синтаксический анализ XML может очень сильно затормозить память. Подумайте об использовании SAX или двоичного синтаксического анализатора на основе XML ( VTD-XML - это Java API, основанный на этом).

На самом деле, если отображение XML-> JSON чисто 1: 1, вы также можете просто прочитать XML и записать JSON в реальном времени построчно, используя небольшой стек.


Вернуться к вопросу: я предлагаю использовать для этого VisualVM . Вы можете найти здесь статью в блоге, как заставить его работать с Tomcat.

1 голос
/ 03 июля 2010

Вы можете использовать профилировщик в jvisualvm в JDK для профилирования памяти.

Также обратите внимание на шаблоны для кэширования преобразователя XSLT.

0 голосов
/ 28 августа 2010

http://wiki.github.com/mchr3k/org.inmemprofiler/

InMemProfiler может использоваться для определения объектов, которые собираются после очень короткого времени.

0 голосов
/ 04 июля 2010

Возможно, вы захотите попробовать LambdaProbe , который является профилировщиком для Tomcat. Поддерживает следующее:

Обзор

Lambda Probe (ранее Tomcat Probe) - самодостаточное веб-приложение, которое помогает визуализировать различные параметры экземпляра Apache Tomcat в режиме реального времени. Лямбда-зонд разработан специально для работы с Tomcat, поэтому он может получить гораздо больше информации, которая обычно доступна агентам JMX. Вот список функций, доступных через лямбда-зонд:

  • Новое! Всестороннее использование памяти JVM монитор.
  • Совместимость с JBoss
  • Отображение развернутых приложений, их статус, количество сессий, сессия количество объектов, количество объектов контекста, использование источника данных и т. д.
  • Запуск, остановка, перезапуск, развертывание и развертывание приложений
  • Возможность просмотра развернутых файлов JSP
  • Возможность компилировать все или выбранные Файлы JSP в любое время.
  • Возможность предварительной компиляции файлов JSP на развертывание приложения.
  • New! Возможность просмотра автоматически сгенерированных Сервлеты JSP
  • Отображение списка сеансов для конкретное применение
  • Отображение атрибутов сеанса и их значения для конкретного приложение. Возможность удалить атрибуты сеанса.
  • Возможность просмотра контекста приложения атрибуты и их значения.
  • Возможность истечения выбранных сессий
  • Графическое отображение источника данных детали, включая максимальное количество количество подключений детали подключения и конфигурации
  • New! Возможность группировки источника данных свойства по URL, чтобы помочь визуализации влияние на базы данных
  • Возможность сброса источников данных в случае приложений утечка связи
  • Отображение системной информации в том числе System.properties, память панель использования и детали ОС
  • Отображение состояния разъема JK в том числе список запросов в ожидании исполнения
  • Графики использования разъемов в реальном времени и статистика.
  • Мониторинг в реальном времени и дорожные карты clulster
  • New! Использование оперативной памяти в режиме реального времени, подкачка мониторинг использования и загрузки процессора
  • Возможность показа информации о журнале файлы и загрузка выбранных файлов
  • Возможность привязывать файлы журнала в реальном время из браузера.
  • Возможность прервать выполнение «зависать» запросы без сервера перезапуск
  • Новое! Возможность перезапустить Tomcat / JVM через Java Serview Wrapper.
  • Наличие "Быстрая проверка"
  • Поддержка DBCP, C3P0 и Oracle * 1064 источники данных *
  • Поддержка Tomcat 5.0.x и 5.5.x
  • Поддержка Java 1.4 и Java 1.5
0 голосов
/ 03 июля 2010

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

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