You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2023/04/28 12:16:22 UTC
[iotdb] 01/02: edit according to review
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 <li...@outlook.com>
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(),