This is an automated email from the ASF dual-hosted git repository.

ashingau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 57b2c2abc54 [opt](metric) add jvm jsonMetric (#25774)
57b2c2abc54 is described below

commit 57b2c2abc54f65ea8e35ac132fa3919a1749bbc4
Author: ranxiang327 <40784350+ranxiang...@users.noreply.github.com>
AuthorDate: Tue Oct 24 15:25:13 2023 +0800

    [opt](metric) add jvm jsonMetric (#25774)
    
    The "http://fe_host:http_port/metrics?type=json"; interface is missing the 
JVM metric.
---
 .../org/apache/doris/metric/JsonMetricVisitor.java | 76 +++++++++++++++++++++-
 1 file changed, 75 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
index d32db92ff58..ffdaea30f4b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/metric/JsonMetricVisitor.java
@@ -18,15 +18,28 @@
 package org.apache.doris.metric;
 
 import org.apache.doris.monitor.jvm.JvmStats;
+import org.apache.doris.monitor.jvm.JvmStats.GarbageCollector;
+import org.apache.doris.monitor.jvm.JvmStats.MemoryPool;
+import org.apache.doris.monitor.jvm.JvmStats.Threads;
 
 import com.codahale.metrics.Histogram;
 
+import java.util.Iterator;
 import java.util.List;
 
 public class JsonMetricVisitor extends MetricVisitor {
     private int ordinal = 0;
     private boolean closed = false;
 
+    // jvm
+    private static final String JVM_HEAP_SIZE_BYTES = "jvm_heap_size_bytes";
+    private static final String JVM_NON_HEAP_SIZE_BYTES = 
"jvm_non_heap_size_bytes";
+    private static final String JVM_YOUNG_SIZE_BYTES = "jvm_young_size_bytes";
+    private static final String JVM_OLD_SIZE_BYTES = "jvm_old_size_bytes";
+    private static final String JVM_YOUNG_GC = "jvm_young_gc";
+    private static final String JVM_OLD_GC = "jvm_old_gc";
+    private static final String JVM_THREAD = "jvm_thread";
+
     public JsonMetricVisitor() {
         super();
         sb.append("[\n");
@@ -34,7 +47,68 @@ public class JsonMetricVisitor extends MetricVisitor {
 
     @Override
     public void visitJvm(JvmStats jvmStats) {
-        return;
+        // heap
+        setJvmJsonMetric(sb, JVM_HEAP_SIZE_BYTES, "max", "bytes", 
jvmStats.getMem().getHeapMax().getBytes());
+        setJvmJsonMetric(sb, JVM_HEAP_SIZE_BYTES, "committed", "bytes",
+                jvmStats.getMem().getHeapCommitted().getBytes());
+        setJvmJsonMetric(sb, JVM_HEAP_SIZE_BYTES, "used", "bytes", 
jvmStats.getMem().getHeapUsed().getBytes());
+
+        // non heap
+        setJvmJsonMetric(sb, JVM_NON_HEAP_SIZE_BYTES, "committed", "bytes",
+                jvmStats.getMem().getNonHeapCommitted().getBytes());
+        setJvmJsonMetric(sb, JVM_NON_HEAP_SIZE_BYTES, "used", "bytes", 
jvmStats.getMem().getNonHeapUsed().getBytes());
+
+        // mem pool
+        Iterator<MemoryPool> memIter = jvmStats.getMem().iterator();
+        while (memIter.hasNext()) {
+            MemoryPool memPool = memIter.next();
+            if (memPool.getName().equalsIgnoreCase("young")) {
+                setJvmJsonMetric(sb, JVM_YOUNG_SIZE_BYTES, "used", "bytes", 
memPool.getUsed().getBytes());
+                setJvmJsonMetric(sb, JVM_YOUNG_SIZE_BYTES, "peak_used", 
"bytes", memPool.getPeakUsed().getBytes());
+                setJvmJsonMetric(sb, JVM_YOUNG_SIZE_BYTES, "max", "bytes", 
memPool.getMax().getBytes());
+            } else if (memPool.getName().equalsIgnoreCase("old")) {
+                setJvmJsonMetric(sb, JVM_OLD_SIZE_BYTES, "used", "bytes", 
memPool.getUsed().getBytes());
+                setJvmJsonMetric(sb, JVM_OLD_SIZE_BYTES, "peak_used", "bytes", 
memPool.getPeakUsed().getBytes());
+                setJvmJsonMetric(sb, JVM_OLD_SIZE_BYTES, "max", "bytes", 
memPool.getMax().getBytes());
+            }
+        }
+
+        // gc
+        Iterator<GarbageCollector> gcIter = jvmStats.getGc().iterator();
+        while (gcIter.hasNext()) {
+            GarbageCollector gc = gcIter.next();
+            if (gc.getName().equalsIgnoreCase("young")) {
+                setJvmJsonMetric(sb, JVM_YOUNG_GC, "count", "nounit", 
gc.getCollectionCount());
+                setJvmJsonMetric(sb, JVM_YOUNG_GC, "time", "milliseconds", 
gc.getCollectionTime().getMillis());
+            } else if (gc.getName().equalsIgnoreCase("old")) {
+                setJvmJsonMetric(sb, JVM_OLD_GC, "count", "nounit", 
gc.getCollectionCount());
+                setJvmJsonMetric(sb, JVM_OLD_GC, "time", "milliseconds", 
gc.getCollectionTime().getMillis());
+            }
+        }
+
+        // threads
+        Threads threads = jvmStats.getThreads();
+        setJvmJsonMetric(sb, JVM_THREAD, "count", "nounit", 
threads.getCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "peak_count", "nounit", 
threads.getPeakCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "new_count", "nounit", 
threads.getThreadsNewCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "runnable_count", "nounit", 
threads.getThreadsRunnableCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "blocked_count", "nounit", 
threads.getThreadsBlockedCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "waiting_count", "nounit", 
threads.getThreadsWaitingCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "timed_waiting_count", "nounit", 
threads.getThreadsTimedWaitingCount());
+        setJvmJsonMetric(sb, JVM_THREAD, "terminated_count", "nounit", 
threads.getThreadsTerminatedCount());
+    }
+
+    private void setJvmJsonMetric(StringBuilder sb, String metric, String 
type, String unit, long value) {
+        sb.append("{\n\t\"tags\":\n\t{\n");
+        sb.append("\t\t\"metric\":\"").append(metric).append("\"");
+        if (type != null) {
+            sb.append(",\n");
+            sb.append("\t\t\"type\":\"").append(type).append("\"\n");
+        }
+        sb.append("\n\t},\n");
+        sb.append("\t\"unit\":\"").append(unit).append("\",\n");
+        sb.append("\t\"value\":").append(value).append("\n}");
+        sb.append(",\n");
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to