Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News JINSPIRED Releases New Version of Lightweight Java Monitoring Tool: OpenCore

JINSPIRED Releases New Version of Lightweight Java Monitoring Tool: OpenCore

Leia em Português

This item in japanese

OpenCore, a lightweight Java application performance monitor by JINSPIRED, released version 6.0 this month.

OpenCore is a performance monitoring library that focuses on low-latency applications. This means it attempts to have as little overhead as possible. The library also specifies an integration model that emphasizes separating "probes" from "measures" from "meters". A probe is an arbitrary begin and end in a program's execution (say, the beginning and end of a method). A meter is point-in-time sample of something like cpu utilization or clock time. A measure is some summary of a bunch of samplings from meters across a set of probes. So, for example, one might say "probe all method entrances and exits. When each probe fires, then meter the elapsed cpu time. Now tell me what the measure of average cpu time per method is."

According to OpenCore, the advantage of separating the three is that overhead can be minimized for activities that will never be measured because "Unlike all other solutions there is no explicit reference to how an activity is measured or whether its firing is indeed measured – this is controlled via configuration of the actual metering runtime by an administrator".

As the project's HowTo describes, using OpenCore on a project involves the following basic steps:

  1. Add the OpenCore native agent from the command line with -agentpath and -javaagent arguments (note: some of the agent uses AspectJ)
  2. Add some OpenCore jars to the classpath
  3. Enable JMX
  4. Create a configuration file that specifies what to be monitored and how

From that point forward, how deeply the application becomes intertwined with OpenCore depends on how it is configured. At its most basic level, OpenCore simply captures method call counts and reports them to JMX. However, the agent was designed to be pluggable so developers can enable more sophisticated built-in metrics and statistics or can inject their own custom-built metrics that capture just about anything and report it anywhere.

The library claims to have a lower overhead, especially for instrumented methods that have been "turned off." For example, in one OpenCore-authored benchmark, VisualVM profiling (which ships with the Sun JDK) was 2-3 times slower than OpenCore probes.

In addition to being used for simple performance diagnosis, OpenCore also purports to "unify multiple application, system, and business related management domains under one model," meaning that it could be used for automatically monitoring and adjusting capacity, metering usage for chargeback, and tracking SLA conformance. This unified vision, however, depends on vendors in those domains adopting the OpenCore technology.

Future releases promise performance monitoring for non-JVM languages like .NET and native Ruby, Python, and PHP, though no specific timeline has been released.

As a final note, developers should note that OpenCore is not open as in "open source" but rather open as in "publicly documented APIs with defined integration and extension points." As William Louth's comments on a recent discussion thread clarify, OpenCore is a commercial product.

Rate this Article