Статьи

Статистика гибернации с Hawtio и Jolokia

Огромная часть корпоративной Java имеет дело с данными. Среди всех различных способов работы с данными в корпоративных настройках все еще существует проверенный и широко обученный подход к использованию O / R-картографирования любого рода. Стандарт JPA делает его сравнительно простым в использовании для всех, и он также должен быть портативным. Но давайте не будем говорить о деталях миграции. Самый большой недостаток O / R-сопоставления заключается в том, что разработчик, как правило, теряет связь с тем, что происходит в базе данных, и даже с тем, какие точные операторы SQL выдаются против нее. Это причина номер один, что эти проекты сталкиваются с проблемами производительности. Если вы там, вам нужно проанализировать основные причины и детализировать проблемы. Недавно я обнаружил замечательную особенность Hibernate, которая делает это сравнительно простым.

Доступная статистика и способы их получения.

Hibernate до 3.5.x поставляется с API статистики и метрик, который позволяет вам многое понять о том, что происходит под прикрытием. Все доступные счетчики описаны в интерфейсе API статистики в трех категориях:

  • Метрики, относящиеся к общему использованию сеанса, такие как количество открытых сеансов, извлеченные соединения JDBC и т. Д.
  • Метрики, связанные с сущностями, коллекциями, запросами и кэшами в целом (иначе говоря, глобальные метрики).
  • Подробные метрики, связанные с конкретной сущностью, коллекцией, запросом или областью кэша.

Например, вы можете проверить соотношение элементов, коллекций и запросов к количеству попаданий, пропущенных и помещенных в кэш и среднее время, необходимое для запроса. Имейте в виду, что количество миллисекунд может быть приближено в Java. Hibernate привязан к точности JVM, и на некоторых платформах это может быть с точностью до 10 секунд.

Простые методы получения используются для доступа к глобальным метрикам (т.е. не привязаны к конкретной сущности, коллекции, области кэша и т. Д.). Вы можете получить доступ к метрикам конкретной сущности, области коллекции или области кэша через его имя и его HQL или SQL-представление для запросов. Пожалуйста, обратитесь к Javadoc API статистики, EntityStatistics , CollectionStatistics , SecondLevelCacheStatistics и QueryStatistics для получения дополнительной информации.

Все, что вам нужно сделать, это включить статистику для интересующей вас фабрики сессий и получить статистику для ее анализа. Существует множество примеров использования этой функции в Spring. Причина довольно проста: Spring поставляется с легендарным MBeanExporter, который представляет JMX MBeans как объекты Java. И угадайте, что: Hibernate Статистика предоставляет простой способ разоблачения их через JMX. Но нет необходимости использовать Spring, если вы просто соберете немного магии RedHat!

В принципе, у вас есть два разных способа включения статистики в ваших настройках. Самый простой способ — добавить свойство в конфигурацию модуля персистентности:

1
   <property name="hibernate.generate_statistics" value="true"/>

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

Включение и предоставление статистики на примере

Я создал небольшой пример отдельного приложения Hibernate с двумя сущностями и основным классом, который работает с hibernate и инициализирует все, что вам нужно знать. Получите свои руки немедленно, разветвляя это на GitHub . Вот маленькая прогулка:

Есть два обязательных объекта (Отдел и Сотрудник) и META-INF / persistence.xml. Это базовая настройка. Здесь не так много магии. Вы можете увидеть, где включить статистику (потенциально) в файле persistence.xml . Пример включает их в основной класс JpaTest . Но давайте начнем с самого начала. Основной метод выполняет следующие шаги по порядку:

  1. Создайте EntityManager для использования.
  2. Зарегистрируйте статистику Mbean нам нужно.
  3. Инициализируйте сервер Jolokia для предоставления JMX через JSON для Hawtio
  4. Делает что-то с сущностями.

Волшебство начинается на втором шаге, который находится в методе registerHibernateMBeans (менеджер EntityManager). Он получает доступ к PlatformMBeanServer, регистрирует соответствующий Hibernate JMX Mbean, устанавливает фабрику сеансов, в которой мы заинтересованы, и включает статистику. Это просто. Теперь у вас есть JMX MBean «Hibernate» с зарегистрированным атрибутом «статистика». Если у вас есть доступ к серверу через JConsole, Mission Control или VisualVM, вы можете просто подключиться к процессу и просмотреть статистику:

Hibernate MBean в JConsole

Hibernate MBean в JConsole

В производственных условиях это обычно вообще невозможно. Поэтому вам нужно будет найти способ получить доступ к этому через http / https. Именно здесь мне было удобно попробовать Hawtio как модульную веб-консоль для управления вашими Java-материалами. Сгорел до основ это веб-консоль с плагинами. Он имеет множество плагинов и может быть настроен и расширен в соответствии с вашими потребностями. Сегодня мы рассмотрим очень простой плагин, плагин JMX . Он дает вам необработанное представление основных данных метрики JMX, предоставляя доступ ко всему дереву доменов JMX MBeans. Но для того, чтобы это произошло, нам сначала нужно найти способ раскрыть возможности JMX для Hawtio. Вот где приходит Jolokia . В нем есть агент JVM, который может представлять JMX MBeans через JSON. Все, что вам нужно сделать, это запустить и запустить сервер следующим образом:

1
2
3
JolokiaServerConfig config = new JolokiaServerConfig(new HashMap<String, String>());
JolokiaServer jolokiaServer = new JolokiaServer(config, true);
jolokiaServer.start();

Теперь вы готовы опробовать консоль Hawtio. Взгляните на быстрый старт, чтобы увидеть, что возможно. В этом примере я просто использую расширение Google Chrome, которое вам нужно просто загрузить и перетащить на страницу расширений в Chrome. Это выглядит так:

Расширение Hawtio в Chrome

Расширение Hawtio в Chrome

Если вы сконфигурируете «localhost», «8778» и путь «jolokia», все готово для просмотра результатов. После того, как вы нажмете «подключить», вы можете просмотреть панель инструментов или переключиться в представление JMX и перейти к Hibernate MBean:

Просмотр JMX MBeans с Hawtio

Просмотр JMX MBeans с Hawtio

Стэн Льюис из DevNation 2014 предлагает вам более полное введение в Hawtio:

Это был короткий пример. Давайте посмотрим на исходный код GitHub и не стесняйтесь заглянуть в Hawtio немного подробнее: