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

  • количество http соединений, пользовательских сессий.
  • количество jdbc соединений, более того можно узнать какие производились запросы и какие из них являются «горячие». Есть возможность увидить открытые в данный момент с точностью до метода из которого происходит обращение, это очень полезно для выявления так называемых утечек соединений.
  • количество памяти и загруженность процессора и прочее.

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

На официальном сайте представлена инструкция по установке, но после проделаных шагов описанных в ней, javaMelody не анализировала соединения к базе данных.В моем случае приложение использовало spring + hibernate,а работало на сервере приложений tomcat. Пришлось допиливать.

Для начала в pom.xml, если вы используете maven добавим нужные зависимости:

<!-- javamelody-core -->
<dependency>
            <groupId>net.bull.javamelody</groupId>
            <artifactId>javamelody-core</artifactId>
            <version>1.56.0</version>
</dependency>
<!-- itext, option to add PDF export -->
<dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>bcmail-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bcprov-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bctsp-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
             </exclusions>
</dependency>

После чего, необходимо изменить web.xml:

<filter>
    <filter-name>javamelody</filter-name>
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>javamelody</filter-name>
    <url-pattern>/monitoring</url-pattern>
</filter-mapping>
<listener>
    <listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            classpath:net/bull/javamelody/monitoring-spring-datasource.xml
            classpath:spring/context.xml
    </param-value>
</context-param>

где, spring/context.xml является путь до вашего контекста приложения spring.

В моем приложении spring использовал datasource описаном в context.xml tomcat’a. Производим замену бина в контексте spring, где datasource берется через JNDI.

<!-- Основной источник данных приложения -->
<jee:jndi-lookup expected-type="javax.sql.DataSource" 
                 id="_dataSource" 
                 jndi-name="jdbc/myDataSource"/>

<bean class="net.bull.javamelody.SpringDataSourceFactoryBean"
      id="dataSource">
        <property name="targetName" value="_dataSource"/>
</bean>

После этого, осталось запустить приложение с ключом:

-Djavamelody.datasources=java:comp/env/jdbc/myDataSource

Панель JavaMelody находится по адресу http://<адрес вашего приложения>/monitoring.

Photo by Josep Molina Secall on Unsplash