【问题标题】:To get the JMX values using the DropWizard metrics-Jvm使用 DropWizard metrics-Jvm 获取 JMX 值
【发布时间】:2023-07-20 09:32:01
【问题描述】:

我尝试使用 dropWizard 库获取 JVM 指标值(MemoryUsageGaugeSet、GarbageCollectionUsageGaugeSet)

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

代码实现。

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

我得到的结果是

{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,池.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, 池。 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, 池s.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,非堆.init=com.codahale.metrics.jvm.MemoryUsageGaugeSet$10@3dd6cf53,pools.PS-Eden-Space.used=com.codahale.metrics.jvm .MemoryUsageGaugeSet$17@3a428c1e,非 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.MemoryUsageGaug eSet$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}

我得到了对象的引用,而不是我想得到这些引用的值。该怎么办?

【问题讨论】:

    标签: java dropwizard codahale-metrics


    【解决方案1】:

    要获取/打印对象的值,您需要在类中实现toString()MemoryUsageGaugeSet 没有它。 验证@javadoc

    一种方法是使用您自己的实现toString() 扩展类。

    另一种方法是遍历地图并打印每个值。您可能想尝试以下类似的方法..

    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 生成 Gauge&lt;Long&gt;,它是 Metric 的实现。

    希望这会有所帮助。

    【讨论】: