ReleaseNotes - adrianrm/javamelody GitHub Wiki
- improved: If there are http or sql requests with many dynamic values like "/get/entity/10" or "select * from table where id in (123, 456)" (dynamic values in sql without binded parameters), you should already use the javamelody parameters
http-transform-pattern
orsql-transform-pattern
, in order to limit disk IO and disk space usage for the statistics and RRD graphs. If you forget that, some RRD files will now be automatically deleted everyday at midnight to limit the disk space used by RRD files under 20 MB. You may configure that limit with the javamelody parametermax-rrd-disk-usage-mb
(20 by default). And old statistics and graphs are automatically deleted like before. (553b323) - fix in the Liferay plugin, to allow JDBC monitoring in Tomcat in an OSGi environment (Liferay 7+), PR 15 thanks to Adrian Rodriguez.
- fix #910 In the optional collect server, only one instance registered when using MonitoringFilter.registerApplicationNodeInCollectServer in several instances.
- fix #9 in JIRA/Confluence/Bamboo/Bitbucket monitoring plugin, blank page when accessing /monitoring in Bamboo 7.
- fix #912 WELD-ENV-000015: Unable to load annotation: javax.ejb.Asynchronous, when using CDI with WELD in Tomcat.
- improved: Database report on locks for Postgresql 9.2+ (e349ac0).
- added: If using the
authorized-users
javamelody parameter, you may not want to write the parameter likeuser:password
as clear text in configuration or script files, so you can write it likeuser:{SHA-256}c33d66fe65ffcca1f2260e6982dbf0c614b6ea3ddfdb37d6142fbec0feca5245
with a one-way hash of the password instead (92e04f2). To compute the hash of the password (with a fixed salt against rainbow tables):- use the html page at .../monitoring?part=hashPassword in a webapp monitored by javamelody 1.83.0 or later (it is recommended to choose a complex password and the SHA-256 algorithm at least)
- or use the html page at http://javamelody.org/demo/monitoring?part=hashPassword
- or on the command line:
java -cp javamelody-core-1.83.0.jar net.bull.javamelody.internal.common.MessageDigestPasswordEncoder passwordToHash
(Download javamelody-core-1.83.0.jar)
- added: doc to configure security of the monitoring reports in Spring boot, using Spring security for example.
- added: if using Tomcat, display sources of Tomcat's classes from stack-traces like for the webapp's dependencies (9907e93).
- added: As an external API, dump of graphs values as XML or as TXT, for the choosen period or for all periods (d11e6a8). See doc.
- added: Links to Last value, Dump XML, Dump TXT below the zoomed graphics (3967ea2).
- added: In the optional collect server, display an alert in the report of a monitored application with several nodes, if some of the nodes are unavailable (481da3e).
- fix #890, warnings on javamelody-prometheus.tld when org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true in Tomcat
- fix #889, GSON format should not depend on XStream.
- improved: in the http sessions, identify the new MS Edge browser as Edg instead of Chrome (304819f).
- optimized: when displaying the report, lazy load images in "Other charts" (cb18db5).
- clarify that statistics in reports starts at midnight (in the server's time zone), for example "1 day since midnight" (#897).
- added: log the response status when using the javamelody log parameter (#888).
- added: when monitoring with Spring using AspectJ with net/bull/javamelody/monitoring-spring-aspectj.xml, Spring's Cglib can be used instead with net/bull/javamelody/monitoring-spring-aop.xml (ee919d0).
- fix #869,
PersistenceException: No Persistence provider for EntityManager
, with Hibernate 5.4 and JPA. And now, the JPA monitoring is always enabled when using JPA 2 directly, even if<provider>net.bull.javamelody.JpaPersistence</provider>
is not added in persistence.xml. - fix #871, thanks to Vicente Rossello Jaume: In the optional collect server, each current request already displayed once is not displayed anymore after refresh.
- fix #876, StopWatch not displayed in statistics by default.
- In the Jenkins Monitoring plugin, fix JENKINS-60433: JEP-200 error on HsErrPid.
- Look further to display the remote user in the current requests, in case of Jenkins plugin or JIRA/Confluence/Bamboo plugin. And add sessionId attribute in the current requests for the External API. (PR 873, thanks to Eugene Kortov)
- fix #884, CircularReferenceException in External API with JSON for current requests.
- added: Google Gson dependency as an alternative to the XStream dependency for JSON in the External API (see doc, b7adc5b).
- added: graph of Usable disk space next to Free disk space in "Other charts" (the usable disk space may be lower than the free disk space, #875).
- added: if the monitoring of a Jenkins server is added in the optional collect server, the monitoring of Jenkins nodes including builds are automatically added at the same time (ee06c01).
- After the JavaMelody real case 1, the real case 2 is the investigation of a Java application with some very slow screens, with detailed explanation on monitoring metrics, statistics and found issues. And the real case 3 on the investigation of why dozen of users are working extra-hours and of other issues. #JavaMelodyRealCase
- fix #851: When using spring-boot and when having @Service and @MonitoredWithSpring, @Async or @Scheduled on the same classes, hits are counted several times.
- fix #848: When using spring-boot-devtools, NPE after hot restart.
- fix #863: NullPointerException in JdbcWrapper if executeBatch without prepareStatement or addBatch
- added: monitor elasticsearch calls automatically, when using spring-boot-starter-data-elasticsearch or when ElasticsearchRestTemplate (or ElasticsearchTemplate) is in Spring's context (1739587).
- added JSP tags to export other metrics to Prometheus: from MBeans like in JMX, from custom java code, from statistics of some HTTP request or of other request (see documentation, 6fbf3d8).
- added new Prometheus metrics in
.../monitoring?format=prometheus
: used non-heap memory, used buffered memory, used physical memory, used swap space, loaded classes count (a704562). - added: In the optional collect server, for an application using several server instances to monitor, it was possible either to add each server instance in the collect server to have graphs and statistics for each instance separately, or to add all instances at once to have aggregated graphs and statistics. But not both, until now. You can now have both by adding each instance one by one, and then you can add an aggregation of these instances, with the buttons at top of the monitoring pages. Note that having N separated + 1 aggregated pages for graphs and statistics needs N times more disk space than only the aggregated data.
- In the Jenkins Monitoring plugin, added a graph in /monitoring/nodes of the sum of waiting durations in seconds of the builds in the build queue, next to the graph of the build queue length (efa4d03).
- improved some German translations (PR 868, thanks to Marco W.)
- fix: when no content in the http response, MonitoringFilter should not flush buffer, caused by e0c2fe0 since 1.78.0. (fixed by 068775a for JENKINS-58419: No redirect after CAS login, in the Jenkins Monitoring plugin).
- fix #843: Tomcat info is not available anymore since Tomcat 8.5.35 and Tomcat 9.0.13.
- fix #847: When downloading more than 2GB, assertionError may occur.
- fix: for a JSR107 jcache, the clear button and the link to cache keys are now unavailable, when the cache was created from a CacheManager initialized by an URI (071032c).
- added: monitor mongodb collections automatically, when using spring-boot-starter-data-mongodb or when MongoDbFactory is in Spring's context (4c9d3af).
- In the Jenkins Monitoring plugin, fix broken 'report' link in Available and Updated tabs of plugin manager (JENKINS-58388).
- The JavaMelody real case 1 is an investigation of a large web site with intermittent slowdowns. See how to analyze monitoring metrics and statistics and find the issues. #JavaMelodyRealCase
- added: support of JCache (javax cache api of JSR107) and of Ehcache3 (#574 with help from James Pether Sörling). Caches using Ehcache 1 & 2 are already automatically displayed in the monitoring reports. And now, caches using any JCache providers, such as Ehcache3, are also displayed in the reports. To display efficiency values, it is needed to enable JCache statistics. For example, in your ehcache.xml file:
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v3'
xmlns:jsr107='http://www.ehcache.org/v3/jsr107' xsi:schemaLocation="
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
<service>
<jsr107:defaults enable-management="true" enable-statistics="true"/>
</service>
...
</config>
- added: display an alert at the top of the monitoring page when there is an exception while collecting data, in order to make easier to fix basic technical issues in javamelody (a7a8b26). For example,
IOException: No space left on device
. - fix to still flush the response when no content in FilterServletResponseWrapper.flushBuffer() (#836)
- fix the database reports for MariaDb following PR 820 (45dc506)
- added: SQLite support in the database reports (PR 840, thanks to mpe85)
- added: Czech translations (2d85a88, thanks to Lukáš Karabec)
- improved: missing German translations (c19539b, thanks to Michael Dobrovnik)
- To contribute in your own language, join the translation project at https://poeditor.com/join/project/QIaCp4bThS.
- In the Jenkins Monitoring plugin, improved the rendering of the management links in the Administer page (JENKINS-57373). Note that the link on "Monitoring of memory, cpu, http requests and more in Jenkins master." goes to the "/monitoring" page. And the link on "You can also view the monitoring of builds, build queue and Jenkins nodes." goes to the "/monitoring/nodes" page.
- fix: When using Spring and LazyConnectionDataSourceProxy or other DelegatingDatasource, exclude it from the monitoring if the target datasource is already monitored (d6ced5c).
- added: ability to upload heap dump files to AWS S3 (PR 810, thanks to Salah Qasem). See doc (scroll down if the target page does not scroll to the right chapter).
- added: in the database reports, added support for MariaDB (PR 820, thanks to Vicente Rossello Jaume).
- improved: in the Jenkins Monitoring plugin, better aggregation of http requests. The javamelody parameter used by default in this plugin is now
-Djavamelody.http-transform-pattern=/\d+/|(?<=/static/|/adjuncts/|/bound/)[\w\-]+|(?<=/ws/|/user/|/testReport/|/javadoc/|/site/|/violations/file/|/cobertura/).+|(?<=/job/).+(?=/descriptorByName/)
. - added: Italian translations (ffc028f, thanks to Gianluca Maiorino)
- added: Ukrainian translations (073bc6d, thanks to Yevgen Lasman)
- To contribute in your own language, join the translation project at https://poeditor.com/join/project/QIaCp4bThS.
- You can already monitor the executions of methods using Spring, EJB or CDI or simple interfaces. But if you want to monitor only a piece of code without creating a method around that piece of code, you can do now like the following and the results will be displayed in the statistics (18ed237):
try (Stopwatch stopwatch = new Stopwatch("name you want")) {
// your piece of code
}
- You can now contribute translations for javamelody by using a dedicated website at POEditor. You may contribute some "untranslated" labels for German and Portuguese or you may contribute new translations for Spanish (under way), Italian or your own language. Join the translation project at https://poeditor.com/join/project/QIaCp4bThS.
For technical reasons, Chinese translations are not available in that website. - fix #795: Session count when using Tomcat cluster with sessions replication, after restarting one instance.
- fix NullPointerException when getting an Oracle explain plan for a SQL request from the optional collect server.
- fix incorrect name in MongoWrapper (#807, thanks to Pablo Palazon)
- fix for Prometheus integration: exclude metrics which have no sense (javamelody_log_duration_millis, javamelody_log_errors_count, javamelody_error_errors_count) and metrics for statistics which are not displayed in the reports (e1db7c5, c0f34a2)
- fix #806 for Prometheus integration again: it was printed '<?>' instead of NaN, for 'lastValue' on Java 8 and before.
- Removed the monitoring of
@Asynchronous
method when using CDI/EJB, to fix #802MonitoringAsynchronousCdiInterceptor must have at least one @InterceptorBinding
in TomEE plume (31b723c). Note that you can continue as before to monitor CDI/EJB methods with a javamelody annotation or by configuration, see doc. - In the javamelody-spring-boot-starter, added the dependency spring-boot-starter-aop and the javamelody.advisor-auto-proxy-creator-enabled property is now false by default, because it was causing issues such as #756 for
@PreAuthorize
, #643 for@Scheduled
, for@FeignClient
and others. (21d904d). If ever you need to enable back the auto-proxy, add the following in application.yml:javamelody.advisor-auto-proxy-creator-enabled: true
. - In the javamelody-spring-boot-starter, the property javamelody.scheduled-monitoring-enabled is now true by default, to automatically monitor
@Scheduled
methods. - added: In the javamelody-spring-boot-starter, Spring
@FeignClient
s are automatically monitored. (0af308b) - added: In the javamelody-spring-boot-starter again, if you already use a management http port different from the default application http port, you may expose the monitoring reports on the management port instead of the application port. See doc for configuration. (#601, thanks to Anders Båtstrand and breneb)
- Fix #794 Compatibility with Google App Engine using Java 8.
- Fix #779 When using JSVC to launch Tomcat, InternalError: errno: 13 error: Unable to open directory /proc/self/fd
- Fix #787 An invalid character [32] was present in the Cookie value, when using the optional collect server in Tomcat.
- Document the compatibility and installation of the JIRA/Confluence/Bamboo plugin with Bitbucket.
- Enhanced: added X-Frame-Options: SAMEORIGIN in the reports.
Added the Offline viewer tool for some degraded cases:
- If ever you don't have access to the online reports of javamelody on the running server,
- or if you want to view the reports of aggregated data for several instances of an application and you don't use the optional collect server and separated reports are not enough,
- or if you want to view the reports but the server is no longer running,
- or if you want some pdf reports and you have not included the iText dependency,
- then the offline viewer may be for you. See doc
- It is a recommended upgrade for security to fix a XML External Entity (XXE) processing vulnerability. CVE-ID is CVE-2018-15531. Thanks to mounsurf & huanying for reporting the vulnerability.
- fix sql monitoring from jndi datasource when Tomcat's ServerInfo.properties is customized (38211a7)
- fix: do not require Log4J when sending metrics to InfluxDB or Datadog.
- In the Jenkins Monitoring plugin, fix #768: warning logs about serializing anonymous classes.
- added: native calendar widget to choose dates for a custom period (84a1d63, with help from my colleague Fabien at KleeGroup)
- added: workaround a JBoss and WildFly bug in MBeans tree (#757)
- added: it is now possible to customize css and js of the monitoring reports by adding the
/net/bull/javamelody/resource/themedMonitoring.css
and/net/bull/javamelody/resource/themedMonitoring.js
files as resources in your application, in order to override or add values. This is the case for example in the javamelody dark theme which is ready to use as a Maven dependency in your pom.xml:
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-dark-theme</artifactId>
<version>1.0</version>
</dependency>
Dark theme:
- Compatibility with JDK 9:
-Djdk.attach.allowAttachSelf=true
is no longer required to have heap histogram and fix the display of source for a JDK class. - fix #398: heaphisto report failed -- unsatisfied link error with multiple webapps in tomcat
- fix #585: ClassNotFound for heap dump on wildfly 10
- Compatibility with JDK 9: fix heap dump and heap histogram, display again the graphs of cpu, opened files and physical memory.
Note: to have the memory histogram in JDK 9 or later, add -Djdk.attach.allowAttachSelf=true in the java command line. - Fix "no token found" with Prometheus integration for a Windows server (e47b11b)
- When using the optional collect server, fix the view of java source (0ea7e76)
- Upgrade build of javamelody-spring-boot-starter to Java 8 and Spring-boot 2 (#741).
- Enhancement: When using Spring MVC, use path from @RequestMapping annotations as http request name, in order to reduce the need of http-transform-pattern parameter (242fb14)
- Enhancement: After generating a heap dump, zip it to reduce its size (98cb8bc)
- Added: The mean number of allocated Kilobytes per request is now displayed in the stats, next to the mean cpu per request. It is the memory used in the heap per request and which will have to be cleaned by the Garbage Collector later. And when more memory is used per request, more cpu will be used by the GC. As an example, 1 Gb allocated in a request, without a good reason, is probably a problem. (33fe61d)
- Added: when crash logs (hs_err_pid*.log files) are found, display them in the system actions (5ebb28e)
- Added: in the zoomed charts, display of the 95th percentile line. It shows what would be the maximum on the period if 5% of the highest values (short peaks) were excluded (9f7acba)
- If you use SpringBootAdmin v1, there is a new module to integrate javamelody in SpringBootAdmin. See doc. SpringBootAdmin is a server to manage and monitor Spring-boot applications and which is a bit like the javamelody collect server. (Thanks to dvtoever for this PR).
- fix rare issue: ArithmeticException: / by zero in JRobin RRD files (JENKINS-51590).
- Removed the
prometheus-include-last-value
javamelody parameter and replaced it by theincludeLastValue
http parameter (08aacb2, see doc). So, in the improbable case that you usedprometheus-include-last-value
for Prometheus integration, change your scrape_config to:
params:
format: ['prometheus']
includeLastValue: ['true']
- In the Jenkins Monitoring plugin, fix #735: NPE when there are no executors.
- Fix #737 for StatsD integration.
- Fix #731: When using CloudWatch, Cloudwatch metric upload can't handle more then 20 items (with help from marcrelation).
- Fix #668:
RrdException: Invalid timestamps specified
in some particular case when using custom period. - Enhanced: when using the optional collect server and when having several nodes in a monitored application, if a node is unavailable, continue to collect data with the others (#736).
- For the JIRA/Confluence/Bamboo plugin only, fix broken auth when using JIRA 7.7.1.
- Fix #700 for Prometheus integration (with help from Stefan Penndorf).
- Fix #701 for Datadog integration (PR #702, thanks to bluegaspode).
- Fix #718: NPE when displaying the webapp dependencies in some particular case.
- In the Jenkins Monitoring plugin, added JEP-200 exclusions when using monitoring with slaves (PR #6 thanks to Jesse Glick)
- improved: Warn in the reports if multiple instances use the same storage directory (#692)
- improved: If the
application-name
parameter is defined, use it when publishing metrics to InfluxDB, Graphite, StatsD, CloudWatch or Datadog instead of the context path (#694) - improved: When there are more than 10 monitored applications (for ex. 60) in the same optional collector server, display a usable table instead of a long list (#675)
- added: When using the optional collect server with ephemeral applications or application's nodes (for example with load-based auto scaling), the addresses and status of the nodes may change dynamically and you may find difficult to manually maintain the list of applications to monitor in the collect server. In that case, you can call an api in your application code to automatically register the application or the application's node when starting and unregister it when stopping. See doc. (#679)
- added: When using the reports by mail, a new javamelody parameter
mail-subject-prefix
can be used to configure the subject of the mail notification. For example, in a Tomcat context file:<Parameter name='javamelody.mail-subject-prefix' value='Production environment JavaMelody reports for {0}' override='false'/>
(PR #710, thanks to vkpandey82) - added: In the External API, the url
monitoring?part=lastValue&format=json
now returns all the last values by names. (The urlmonitoring?part=lastValue&graph=usedMemory
already returns the last value of a single graph by name.)
- added: integration with Prometheus: Metrics are already displayed in the monitoring reports. You can also scrape the same metrics from Prometheus at the frequency you wish for advanced visualizations, if you have a Prometheus server installed (PR #682 & PR #684, thanks to slynn1324). See doc.
- added integration with StatsD: Metrics are already displayed in the charts of the monitoring reports. As an extra, you can also publish the same metrics to StatsD, if you have a StatsD daemon installed. The parameter is
statsd-address
, see doc. (92aeffe) - fix #672: because of issues with aspectj / auto-proxy in some cases, methods annotated by @Async, @Scheduled or @Schedules are no longer automatically monitored when using
net/bull/javamelody/monitoring-spring.xml
. They are now monitored by addingnet/bull/javamelody/monitoring-spring-scheduled.xml
in the Spring context. - fix #681: upgrade prototype.js, effects.js and slider.js
- fix #665: fix jdbc undeploy in WildFly 10.1.0 / JBoss EAP 7.0 (with help from Christoph Böhme)
- In Jira 6+, make sure that the current user is an ApplicationUser (PR #2, thanks to Andreas Ebert)
- In Bamboo 6+, fix #671: Monitoring page forbidden
- In the javamelody grails plugin, when using Grails 3.2.11, fix #43, "No signature of method: java.lang.String.encodeAsHTML()", (PR #50, thanks to Graeme Rocher and Sébastien Martin) and fix #48: "No value for key [org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy] bound to thread" (PR #51, thanks to Sébastien Martin)
- fix #648: When using Quartz 2.2, IncompatibleClassChangeError: Found interface org.quartz.Trigger, but class was expected.
- In the Jenkins plugin, fix NPE when using CloudWatch or Graphite (3e2b872).
- In the Jenkins plugin with FreeBSD, fix JENKINS-45963: if the collect fails for one slave, continue with the others
- fix: when having several monitored webapps and for each one a different datasource and the javamelody
datasources
parameter, the sql statistics may be displayed in the monitoring of the wrong webapp (b06f34f and 93960c0). - added integration with InfluxDB: Metrics are already displayed in the charts of the monitoring reports. Like integrations with Graphite and AWS CloudWatch, you can also publish the same metrics to InfluxDB for advanced visualizations, if you have an InfluxDB server installed. The parameter is
influxdb-url
, see doc. (f7c8503) - added integration with Datadog: Like for InfluxDB, you can also publish the same metrics to Datadog for advanced visualizations. The parameter is
datadog-api-key
, see doc. (239aa4e) - Removed HibernateBatchFactory from source and from wiki, which is certainly no longer used by anybody.
(for javamelody-core and javamelody-spring-boot-starter)
- fix #645: When using Quartz 2, ClassNotFoundException: net.bull.javamelody.Quartz2Adapter (thanks to cyburglar)
- fix #643: When using the javamelody-spring-boot-starter, scheduling of methods annotated with @Scheduled does not work. The monitoring of those method is now no longer enabled by default. To enable again the monitoring of those methods see the updated doc.
- improved (Brazilian) Portuguese translation (PR #642, thanks to Sandro Giacomozzi).
- fix #634: Deployment error related to CDI in WebLogic and warnings in JBoss (thanks to jncharpin)
- fix #639: Deployment warning related to CDI in WebLogic 12.2 (thanks to Michael Dobrovnik)
- fix: When using JIRA v7, with the monitoring plugin, add again the "Monitoring" link in the menu of the Administration / System page (38b8593).
- fix: When using the Spring boot starter, parameters were ignored in Spring Boot app deployed as war in Tomcat (6e0b2cb for #632).
- fix #638: When using scripts and alerts, ClassNotFoundException in Jenkins if the monitored webapp is using Ehcache or Quartz jobs.
- fix #42: In the JavaMelody Grails plugin, fix compatibility with Grails 3.3 (and starting with this release, it will not be compatible anymore with Grails 3.1 and before).
- fix #46: The JavaMelody Grails plugin must load after grails-quartz plugin to allow full reconfiguration of the scheduler thread (thanks to Jerry Boonstra)
- Internal classes moved: At last, after years of waiting, it's possible in JDK 9 to have internal classes public but not accessible outside of the javamelody jar file, like if these classes were not public. So, many internal classes, which were not public and all in the
net.bull.javamelody
package, are now moved tonet.bull.javamelody.internal.*
packages. Beware, applications must not import the classes in thenet.bull.javamelody.internal.*
packages. And to be sure of that, amodule-info.java
file will be added and the internal packages will not be exported outside of the javamelody module. (As a reminder, the goal of having internal classes opposed to a public and documented API is to be able to refactor and improve the implementation freely without ever breaking applications.) - added: With Spring, when using
net/bull/javamelody/monitoring-spring.xml
in the Spring context or when using the Spring boot starter, automatically monitor the execution of methods having a @Controller, @RestController, @Service, @Async, @Scheduled or @Schedules annotation (c7c45ab) - added: When using EJB, automatically monitor the execution of methods having an @Asynchronous annotation (31b723c).
- added integration with Graphite: Metrics are already displayed in the charts of the monitoring reports. As an extra, you can also publish the same metrics to Graphite for advanced visualizations, if you have a Graphite server installed. The parameter is
graphite-address
, see doc. (ce94787) - added integration with AWS CloudWatch: Like for Graphite, you can also publish the same metrics to AWS CloudWatch for custom visualizations and mail or autoscaling alarms, if you have AWS EC2 server instance(s) with detailed monitoring in AWS CloudWatch. The parameter is
cloudwatch-namespace
, see doc. (e65d605) - added: In the list of threads, add an action to send an interrupt signal to a thread. The thread can test Thread.currentThread().isInterrupted() to stop itself. (7977f2b)
- added: PDF link in the threads page (b356132)
- known major issue in 1.67.0, #634: Deployment error related to CDI in WebLogic and warnings in JBoss.
- fix RUM monitoring when the URL ends with '/' in 1.66.0.
- fix #617: Charts of http/sql stats can not be viewed after restarting the application (with help from goldyliang).
- fix #622: In the collector server, malformed main html page when the monitored app is down.
- fix #623: In the collector server, spikes on gc, transaction and cpu graphs after collector restart.
- fix: In the collector server, after a restart, a monitored application can't be removed if it is no longer available.
- fix #631: When using the collector server, minor security issue if XML transport format with xstream is configured in the collector server parameters.
- fix: If the monitoring of an invalid JNDI datasource fails, don't ignore the others (dca0b07).
- added: When using Ehcache, display keys from the caches and add ability to remove a specific key from a cache (PR #630, thanks to Aleksandr Mashchenko).
- added: Display the number of http sessions and sessions mean size before the list of sessions, when there are more than 20 (PR #629, thanks to Aleksandr Mashchenko).
- improved: When displaying Java sources from stack-traces, locate more sources by reading Maven pom.xml of the webapp and of the other dependencies, when they exist.
- added: Display webapp dependencies in a new page, accessed by a link in the System informations details, and include detailed name, website url, Maven groupId:artifactId:version and license of each dependency, based on Maven pom.xml files. (e7607c1, except in JIRA/Confluence/Bamboo because of OSGi restrictions)
- added: With Spring, when using
net/bull/javamelody/monitoring-spring.xml
in the Spring context or when using the Spring boot starter, add a link to display "Spring beans", in System informations next to the "JNDI tree" link (5cd7c5a). - added: With Spring again, when using
net/bull/javamelody/monitoring-spring.xml
in the Spring context or when using the Spring boot starter, if RestTemplate is used and if it is defined as Spring bean (for example,<bean id="restTemplate" class="org.springframework.web.client.RestTemplate" />
), then the REST http calls from the webapp with this RestTemplate are monitored and response times are displayed in the Spring statistics of the monitoring report (b672ddb). - added: In the database reports, 10 new reports for MySQL (with help from MySQL perf analyzer, Apache license): long running queries, statistics of tables, unused indexes, events waits summary, table access summary, index access summary, table lock wait summary, tables without PK, queries summary for the last 24h, memory summary (this last one works only in MySQL v5.7) and 1 new report for Oracle database: statistics of tables (62d86d1).
- added: When the webapp is built by Maven or when the javamelody parameter
application-version
is set, the version of the webapp is displayed at the top of the report and a drop-down list of versions next to "Customized" period allows to display the report for the period of each version deployed, to compare between them for example. (d61e65f, based on an idea by dhartford). - added: Like for EJB monitoring, monitor CDI (or EJB 3.1) beans by simply adding the
@net.bull.javamelody.Monitored
annotation on beans classes or methods to monitor (3f60bff). - added: Real User Monitoring (RUM). It allows to measure the experience from the end user perspective, by monitoring times in the browser for each html page until it is displayed and ready to be used (b85652a, see doc).
- The Real User Monitoring works by injecting on the fly a Boomerang javascript at the end of html pages, just before the
</body>
end tag, which sends data back to the monitoring in your server. Then in the detailed monitoring report of http requests for html pages, times and percentages are displayed for Network, Server execution, DOM processing and Page rendering, to compare which ones contribute to a good or bad end user experience. The Real User Monitoring does not add a noticeable overhead on the server, but the javascript adds a simple http(s) call for each html page, which may add a small overhead on the client browser. - This Real User Monitoring is not enabled by default. To enable it, add a parameter
rum-enabled
in web.xml, in context or in system properties like the other javamelody parameters. For example in your WEB-INF/web.xml file:
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<init-param>
<param-name>rum-enabled</param-name>
<param-value>true</param-value>
</init-param>
</filter>
...
- improved: when using the net.bull.javamelody.JdbcDriver in your configuration (without a datasource), accept the driver class in the jdbc URL like in the jdbc properties (617adff). For example in hibernate.cfg.xml:
<property name="hibernate.connection.driver_class">net.bull.javamelody.JdbcDriver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myschema?driver=com.mysql.jdbc.Driver</property>
or
<property name="hibernate.connection.driver_class">net.bull.javamelody.JdbcDriver</property>
<property name="hibernate.connection.driver">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myschema</property>
- fix NoSuchMethodError: net.sf.ehcache.Ehcache.getStatistics() in 1.64 (issue #616)
- fix compatibility with Java 9. (PR #609 for issue #556 , thanks to James Pether Sörling)
- In the Jenkins plugin, fix JENKINS-42112 : HTTP user session is reported as "anonymous" when using anything but AbstractPasswordBasedSecurityRealm (like Google login plugin or Cloudbees Operations Center).
- In the Liferay plugin, fix compatibility with Liferay 7 (649fd35 and PR #7 with help from Inácio Nery from Liferay, fixed in 1.63.1)
- Liferay plugin is now published in the Liferay marketplace.
- improved: make easier the selection of the stack-trace text in the tooltips of the threads list (736cf0e)
- added: javamelody sprint boot starter to simplify configuration of javamelody when using Spring Boot (PR #615 thanks to Georg Wittberger).
- added: pdf report in the detail page of a request. (28e2474)
- added: links to view java source from errors and threads stack-traces. (e5263bf)
- Source from the JDK and source from artifacts built by Maven and available in Maven central can be viewed. So if your server uses a JRE and not a JDK, source from the JDK are not available. And note that many artifacts available in Maven central were not built by Maven, for example Tomcat libraries, so sources of those artifacts can't be located.
- The javamelody parameter
maven-repositories
can be used like the other javamelody parameters, to search for sources of Maven artifacts in other repositories than your local repository and than Maven central, and such as your own company repository containing the sources of your own app. The parameter value must be a comma separated list of Maven repositories URLs (~/.m2/repository,https://repo1.maven.org/maven2/
by default and recommended as last repositories). And if your repository needs basic authentication, you can insert "username:password" in the URL. For example in the web.xml :
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<init-param>
<param-name>maven-repositories</param-name>
<param-value>https://myusername:[email protected],~/.m2/repository,https://repo1.maven.org/maven2/</param-value>
</init-param>
</filter>
...
- added: new javamelody parameter
application-name
, to override the default one based on the context path of the webapp and on the hostname. Using this parameter will change the default storage directory path. (PR #604 thanks to kai-modrzok) - added: if the javamelody parameter
jmx-expose-enabled
is set to true, then javamelody mbeans are available with aggregated statistics data about requests. See doc. (PR #591 thanks to Alexey Pushkin)
- doc added: Summary of javamelody parameters to extend the user's guide
- removed: specific support of Jonas application server for datasource monitoring (dab4131)
- removed: zip file of sources is not published anymore in releases, since source code is easy to browse or to download for each release.
- moved: source and jar file download of the JIRA / Confluence / Bamboo plugin are moved to a new repository
- Fix Liferay plugin compatibility issue 5: Javamelody breaks web content edition, since Liferay 6.2 CE GA5 and EE SP13 and issue 6: since Liferay 6.2 EE SP15, error "Please select a valid change frequency" when editing a web content. (Fixed in 1.62.1)
- Sonar v6.1 released on October 13, 2016 is known to be incompatible with the Sonar plugin. There is PR 1305 in Sonar to fix this issue. (Merged and released in Sonar v6.2).
- When using JPA Criteria API with Hibernate or EclipseLink, fix JPA requests names like
CriteriaQueryImpl@3b0cc2d
(e60df91, with help from Christoph Linder who is at the origin of this change and this page from Antonio Goncalves). For example, when using Hibernate, it will display JPQL instead, but still waiting Hibernate to implement CriteriaQueryImpl.toString(). - Refactored JPA code to make it more clear (thanks to Christoph Linder).
- fix issue 592: some file handles may be left open when having frequent undeploy / redeploy.
- fix issue 594 and issue 596: StringIndexOutOfBoundsException in the reports and jdbc datasource not monitored, when using Paraya server (thanks to Thomas Kernstock).
- added:
/* BATCH */
prefix in batch sql requests to discern that in this case 1 hit is for a whole batch (44bc752). - added: configuration to be able to use forward instead of include in CustomResourceFilter (PR 599 thanks to James Pether Sörling for issue 597 using Vaadin).
- added: check for updated version of javamelody. If a new version is available, a message is now displayed at the top of the report to notify about the new version. For that, javamelody pings the server javamelody.org. And to better understand javamelody users, anonymous data such as java version and OS is sent to that server at the same time. An example of the data sent is:
{uniqueId="3d117c04b914c78ddbaf14818c404c8e88c6e56f", serverInfo="Apache Tomcat/8.5.9", javamelodyVersion="1.63.0", applicationType="Classic", javaVersion="Java(TM) SE Runtime Environment, 1.8.0_111-b14", jvmVersion="Java HotSpot(TM) 64-Bit Server VM, 25.111-b14, mixed mode", maxMemory="1024", availableProcessors="4", os="Windows 7, Service Pack 1, amd64/64", databases="", countersUsed="http|sql|error|log", parametersUsed="log", featuresUsed="pdf", locale="fr_FR", usersMean=1, collectorApplications=-1}
. - Usage stats based on the anonymous data will be publicly available at http://javamelody.org/usage/stats for applications using JavaMelody v1.63 or later and able to contact the server.
- You may disable the update check with the javamelody parameter
update-check-disabled=true
in web.xml, in context or in system properties like the other javamelody parameters. - The online demo of javamelody is finally back. To see it, you can play a bit with this app (written by Benjamin Durand some years ago) to be sure to have some data in http and sql statistics, then open the monitoring page to explore the reports.
- fix XSS (reported by Omar El Mandour, CVE-2016-1000273)
- In the JavaMelody Grails plugin, fix interception when method is a closure (grails PR 31 and grails PR 37, thanks to Alessandro Gastaldi and Sébastien Martin)
- fix XSS (reported by Dallas Kaman, Praetorian Group)
- In the JavaMelody Grails plugin, fix to remove views that cause collision with other plugins/app. (grails PR 36, thanks to Christian Oestreich, fixed in v1.60.1)
- added: monitoring MongoDB queries. See the documentation.
- added: in the Spring Boot configuration example, automatic monitoring of Spring services and controllers, without having to use the
@MonitoredWithSpring
annotation. added jpa-naming-strategy parameter to allow customization of request names displayed in JPA statistics. (based on PR 567, thanks to Christoph Linder). But still waiting Hibernate to implement CriteriaQueryImpl.toString().- upgraded jpa api to 2.1.
- New javamelody plugin to monitor a Alfresco server. Documentation is here
- Fix XSS in graph page (PR 555, thanks to Tim Helmstedt)
- In the JavaMelody Grails plugin, migrate the plugin to Grails 3.x and upload it to Bintray (grails PR 33, thanks to Sergio Michels). The plugin is available in Bintray here.
- Documentation for the JavaMelody Grails plugin is updated and moved at http://www.grails.org/plugins.html#plugin/grails-melody-plugin. For v1.60, you can install the plugin in Grails 3, with just a dependency:
dependencies {
runtime 'org.grails.plugins:grails-melody-plugin:1.60.0'
}
- Sergio Michels is now committer in the JavaMelody Grails plugin.
In the Liferay plugin, fix compatibility issue 5: Javamelody breaks web content edition, since Liferay 6.2 CE GA5 and EE sp13 (fixed in plugin v1.59.2)- In the Jenkins plugin, fix JENKINS-34794, Jenkins sometimes doesn't start because of transient NPE (thanks to Félix Belzunce Arcos)
- Limit error messages to 1000 characters and error stack-traces to 50000 characters, to avoid high memory consumption when log messages are very long (PR 550, thanks to Zdenek Henek)
- added javamelody parameter
csrf-protection-enabled
to enable protection against CSRF on actions such as run GC, invalidate sessions, kill thread by id ... (Not enabled by default since an attacker would need to know about javamelody in an application and about its URLs and would need to force an administrator to access the monitoring and even in this case, the attacker certainly can't make the application unvailable and can't steal data or anything.) To enable this protection, add the parameter in web.xml, in context or in system properties like the other javamelody parameters. For example, add the system propertyjavamelody.csrf-protection-enabled=true
in $CATALINA_HOME/conf/catalina.properties if Tomcat. - Doc for JIRA / Confluence / Bamboo plugin updated: In the datasource configuration, use maxTotal instead of maxActive since JIRA 7.0 or Confluence 5.9 (that is when using Tomcat 8).
- fix issue 532: do not flush a closed output stream.
- fix issue 533: IllegalArgumentException during metrics update (JENKINS-33050)
- In the Jenkins plugin, fix username in the list of http sessions (d111126)
- improved: wrap very long http and sql queries without whitespace, in order to fit into the screen and to avoid horizontal scrollbar (3a88a75)
- added: in the Liferay plugin, monitoring of SQL requests and jdbc connections for Liferay portal and for portlets (in plugin v1.59.1)
- added: display the client's browser and OS in the list of http sessions (6d89f42)
- added: Support Log4J 2 since v2.4.1 like Log4J (068139d)
- added: Support Informix in database reports (319cdbe, thanks to Maciej)
- added: Show used memory in dialog after manual GC (issue 522)
- Change the visibility of JpaWrapper.createEntityManagerFactoryProxy to public (PR 521, thanks to domtoupin)
- fix issue 492: incompatibility of the release v1.57.0 (isAsyncStarted) with servlet api 2.5 (Tomcat 6).
- fix the datasource monitoring in WildFly 9.0.1 (45203cf thanks to jayblanc)
- fix JENKINS-23442, In the Jenkins plugin, ClassCircularityError: java/util/logging/LogRecord (0ad60da)
- improved: In the Jenkins plugin, upgrade the minimum Jenkins version to 1.580.1 and replace use of deprecated Jenkins api
- fix issue 503: incompatibility with JIRA 7 (fixed in v1.57.1)
- fix issue 511: rename VERSION.properties to remove conflict with jgroups
- fix from PR 505 and PR 507: German translations (thanks to mawulf)
- fix from grails PR 27: In the JavaMelody Grails plugin, fix uppercase environment names to lowercase (thanks to timic)
- fix from grails PR 28: In the JavaMelody Grails plugin, fix cannot disable spring counter (thanks to timic)
- added: if Java 7 or later, 2 new graphs are displayed in "Other charts", below the main charts: "% System CPU" and "Used buffered memory" (5029404).
- % System CPU is the CPU usage for the whole system (not just the JVM), between 0 and 100%.
- Used buffered memory is the memory used, either by direct buffers allocated outside of the garbage-collected heap, using ByteBuffer.allocateDirect, or by mapped buffers created by mapping a region of a file into memory, using FileChannel.map.
- improved: limit the different child requests per request in statistics to a raisonnable number (10000), issue 496.
- fix: check if async before flushing the response (ee87b4b thanks to Mark Thomas)
- fix issue 338: JavaMelody swallows response when some Spring WebAsyncTask/Callable is used (fix thanks to Violeta Georgieva). The web.xml example in the User's guide is also changed for those Async requests with Servlet API 3.0.
- fix: used/max file descriptor counts are not displayed in oracle java 8 (c04ef79 thanks to Colin Ingarfield)
- fix issue 488: IllegalStateException if a filter calls getWriter() before the MonitoringFilter
- fix: in latest JIRA versions, the monitoring report outputs garbage (because gzip compression is now enabled by default in JIRA ; the fix disables the gzip compression of the monitoring report)
- fix the monitoring of JNDI DataSources in Tomcat 8, for example in Confluence 5.8 (99767fb).
- fix issue 480: StackOverflowError when applying sql-transform-pattern
- improved: SQL keywords are highlighted in statistics (d78734c)
- added: it's now easy to write scripts to get monitoring data from a monitored webapp and to send alerts based on thresholds using Jenkins. See the documentation.
- improved: An api page is now available in the monitoring of your webapp with links to the ExternalAPI. The path of the page in your webapp is "monitoring?resource=help/api.html".
- User's guide updated: better explain when to use http-transform-pattern or sql-transform-pattern (with help from Siegfried Goeschl)
-
User's guide updated: When using Tomcat, you can use variable substitution with system properties in the context xml file or in the web.xml file of your webapp. For example, to set the storage directory relative to the Tomcat home, add the following in the context file of the webapp in Tomcat conf:
<Parameter name='javamelody.storage-directory' value='${catalina.base}/javamelody' override='false'/>
. - Advanced User's guide updated: JavaMelody install in Spring-boot is documented, with example app.
- Jenkins plugin: scripts examples updated to get data from slaves in Jenkins Monitoring Scripts, below the scripts for Jenkins master.
- added: javamelody-collector-server.war file is published in Maven Central (issue 467). This war file is optional and not needed in most use cases.
- note: there is an unfortunate incompatibility of this release v1.57.0 (isAsyncStarted) with servlet api 2.5 (Tomcat 6). This is now fixed and the fix is available in nightly build.
-
The JavaMelody project is now migrated from GoogleCode (https://code.google.com/p/javamelody) to GitHub. The new project home page is: https://github.com/javamelody/javamelody/wiki
-
JavaMelody Issues, Releases (downloads), Release notes, User's guide have new pages.
-
Contributors to code can now fork the github repository and submit pull requests
-
The repository of the Grails plugin is also moved to https://github.com/javamelody/grails-melody-plugin
-
The repository of the Liferay plugin is moved to https://github.com/javamelody/liferay-javamelody
-
The repository of the Sonar plugin is moved to https://github.com/javamelody/sonar-javamelody
See also release notes of previous versions.