This is an automated email from the ASF dual-hosted git repository. marklau99 pushed a commit to branch optimize-metrics in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 27e84616204490f13f17bb9b0d72a48006d11a44 Author: Liu Xuxin <[email protected]> AuthorDate: Fri Apr 28 17:42:30 2023 +0800 edit according to review --- .../metrics/metricsets/jvm/JvmThreadMetrics.java | 31 +++++++++++++++++++--- .../iotdb/db/service/metrics/FileMetrics.java | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java index 5c4731de384..1dfcdcbb93c 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/jvm/JvmThreadMetrics.java @@ -25,11 +25,20 @@ import org.apache.iotdb.metrics.utils.MetricLevel; import org.apache.iotdb.metrics.utils.MetricType; import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** This file is modified from io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics */ public class JvmThreadMetrics implements IMetricSet { + private static long lastUpdateTime = 0L; + private static final long UPDATE_INTERVAL = 10_000L; + private static Map<Thread.State, Integer> threadStateCountMap = + new HashMap<>(Thread.State.values().length + 1, 1.0f); + @Override public void bindTo(AbstractMetricService metricService) { ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); @@ -85,9 +94,25 @@ public class JvmThreadMetrics implements IMetricSet { // VisibleForTesting static long getThreadStateCount(ThreadMXBean threadBean, Thread.State state) { - return Arrays.stream(threadBean.getThreadInfo(threadBean.getAllThreadIds())) - .filter(threadInfo -> threadInfo != null && threadInfo.getThreadState() == state) - .count(); + checkAndUpdate(threadBean); + return threadStateCountMap.getOrDefault(state, 0); + } + + private static void checkAndUpdate(ThreadMXBean threadBean) { + if (System.currentTimeMillis() - lastUpdateTime < UPDATE_INTERVAL) { + return; + } + lastUpdateTime = System.currentTimeMillis(); + threadStateCountMap.clear(); + List<ThreadInfo> infoList = + Arrays.asList(threadBean.getThreadInfo(threadBean.getAllThreadIds())); + infoList.forEach( + info -> { + if (info != null) { + Thread.State state = info.getThreadState(); + threadStateCountMap.compute(state, (k, v) -> v == null ? 1 : v + 1); + } + }); } private static String getStateTagValue(Thread.State state) { diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java index 483c2b7345b..563627fa9e4 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java @@ -173,7 +173,7 @@ public class FileMetrics implements IMetricSet { }; metricService.createAutoGauge( Metric.FILE_COUNT.toString(), - MetricLevel.CORE, + MetricLevel.IMPORTANT, this, FileMetrics::getOpenFileHandlersNumber, Tag.NAME.toString(),
