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 08:55:49 UTC
[iotdb] branch fix-compaction-tmp-error updated: optimize jvm thread metrics
This is an automated email from the ASF dual-hosted git repository.
marklau99 pushed a commit to branch fix-compaction-tmp-error
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/fix-compaction-tmp-error by this push:
new 238e9873aa8 optimize jvm thread metrics
238e9873aa8 is described below
commit 238e9873aa89b8065015eff6fac158615bb426a7
Author: Liu Xuxin <li...@outlook.com>
AuthorDate: Fri Apr 28 16:55:38 2023 +0800
optimize jvm thread metrics
---
.../metrics/metricsets/jvm/JvmThreadMetrics.java | 30 +++++++++++++++++++---
1 file changed, 27 insertions(+), 3 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..193cab6bd86 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,19 @@ 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<>();
+
@Override
public void bindTo(AbstractMetricService metricService) {
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
@@ -85,9 +93,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.put(state, threadStateCountMap.getOrDefault(state, 0) + 1);
+ }
+ });
}
private static String getStateTagValue(Thread.State state) {