Search code examples
javadropwizardcodahale-metrics

To get the JMX values using the DropWizard metrics-Jvm


I tried to get the JVM metrics values (MemoryUsageGaugeSet,GarbageCollectionUsageGaugeSet) using the dropWizard library

 <dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-jvm</artifactId>
    <version>3.1.2</version>
 </dependency>

Code Implementation.

  public static void main(String[] args ){
  MemoryUsageGaugeSet memory = new MemoryUsageGaugeSet();
  Map<String, Metric> memoryMap = memory.getMetrics();
  system.out.println( memoryMap);}

The result i got was

{heap.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$8@d16011, non-heap.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$11@cc09904, pools.Code-Cache.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@748032cc, pools.Code-Cache.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@2b6e0423, heap.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$6@203428b7, pools.PS-Old-Gen.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@28b49d0c, total.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$4@5dd7cc84, pools.PS-Old-Gen.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@6438401, total.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$1@7b365ee, non-heap.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$12@be3d4e9, pools.PS-Eden-Space.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@68339afd, pools.Compressed-Class-Space.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@724a6876, pools.Metaspace.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@6ecaffc4, pools.Metaspace.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@7b1b3a68, pools.PS-Eden-Space.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@f8ba384, pools.PS-Eden-Space.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@2e2373db, pools.Compressed-Class-Space.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@17ae8d04, heap.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$9@35c43de3, pools.PS-Eden-Space.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@67013f5c, pools.PS-Survivor-Space.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@520935cc, pools.Code-Cache.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@31ac5424, pools.Compressed-Class-Space.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@25135cd7, pools.Metaspace.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@4b066cf6, pools.PS-Survivor-Space.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@50ba970f, pools.PS-Old-Gen.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@3e4e448, pools.Code-Cache.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$15@3c2ef507, pools.PS-Survivor-Space.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@44374fa8, total.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$2@40b1aace, pools.Code-Cache.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$19@6453d034, pools.PS-Old-Gen.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@2f9e8774, heap.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$5@512ad720, non-heap.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$13@1c80e011, pools.Compressed-Class-Space.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@662841c5, non-heap.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$10@3dd6cf53, pools.PS-Eden-Space.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@3a428c1e, non-heap.usage=com.codahale.metrics.jvm.MemoryUsageGaugeSet$14@21d9632f, heap.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$7@5db28b8, pools.PS-Survivor-Space.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@efcd307, pools.Metaspace.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@20f09cba, total.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$3@4ada5390, pools.Metaspace.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@16982c9b, pools.Compressed-Class-Space.max=com.codahale.metrics.jvm.MemoryUsageGaugeSet$16@7e94b1a4, pools.PS-Survivor-Space.committed=com.codahale.metrics.jvm.MemoryUsageGaugeSet$18@5aa5f780, pools.PS-Old-Gen.used=com.codahale.metrics.jvm.MemoryUsageGaugeSet$17@427b7997}

I got the references of the object, instead i want to get the values of these references. What to do for this?


Solution

  • To get/print the value of an object you need to have the toString() implemented in the class and MemoryUsageGaugeSet doesn't have it. Verify @ javadoc

    One way is to extend the class with your own implementation toString().

    The other way is to iterate over the map and print each value. You may want to try something like below ..

    Map<String, Metric> memoryMap = memory.getMetrics();
    
    for (String key : memoryMap.keySet()) {
        Metric m = memoryMap.get(key);
        System.out.println(m.getClass());
    
        if (m instanceof Gauge) {
            System.out.println(((Gauge<Long>) m).getValue());
        }
    }
    

    MemoryUsageGaugeSet results in the Gauge<Long> which is an implementation of Metric.

    Hope this helps.