You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ta...@apache.org on 2024/01/12 06:29:31 UTC
(iotdb) branch master updated: exclude gc time from cpu usage percentage for thread pool and modules (#11883)
This is an automated email from the ASF dual-hosted git repository.
tanxinyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new d1fc9b0cd79 exclude gc time from cpu usage percentage for thread pool and modules (#11883)
d1fc9b0cd79 is described below
commit d1fc9b0cd793f10ba2961c899b81ffd4f2210f12
Author: Liu Xuxin <37...@users.noreply.github.com>
AuthorDate: Fri Jan 12 14:29:24 2024 +0800
exclude gc time from cpu usage percentage for thread pool and modules (#11883)
---
.../iotdb/confignode/service/ConfigNode.java | 2 +-
.../db/service/metrics/DataNodeMetricsHelper.java | 2 +-
.../service/metric/JvmGcMonitorMetrics.java | 10 +++++++---
.../service/metric}/cpu/CpuUsageMetrics.java | 23 +++++++++++++++++++---
4 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index 07f723ecc67..4565a8282bc 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.commons.service.RegisterManager;
import org.apache.iotdb.commons.service.ServiceType;
import org.apache.iotdb.commons.service.metric.JvmGcMonitorMetrics;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.cpu.CpuUsageMetrics;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.confignode.client.ConfigNodeRequestType;
import org.apache.iotdb.confignode.client.sync.SyncConfigNodeClientPool;
@@ -50,7 +51,6 @@ import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCServiceProcessor;
import org.apache.iotdb.db.service.metrics.ProcessMetrics;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.metrics.metricsets.UpTimeMetrics;
-import org.apache.iotdb.metrics.metricsets.cpu.CpuUsageMetrics;
import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics;
import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
index ef06d98cebb..680585d9964 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/DataNodeMetricsHelper.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.service.metric.JvmGcMonitorMetrics;
import org.apache.iotdb.commons.service.metric.MetricService;
import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
+import org.apache.iotdb.commons.service.metric.cpu.CpuUsageMetrics;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.pipe.metric.PipeDataNodeMetrics;
import org.apache.iotdb.db.queryengine.metric.DataExchangeCostMetricSet;
@@ -40,7 +41,6 @@ import org.apache.iotdb.db.queryengine.metric.QueryRelatedResourceMetricSet;
import org.apache.iotdb.db.queryengine.metric.QueryResourceMetricSet;
import org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
import org.apache.iotdb.metrics.metricsets.UpTimeMetrics;
-import org.apache.iotdb.metrics.metricsets.cpu.CpuUsageMetrics;
import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics;
import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics;
import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics;
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/JvmGcMonitorMetrics.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/JvmGcMonitorMetrics.java
index db6987bbb3c..fd7e500808c 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/JvmGcMonitorMetrics.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/JvmGcMonitorMetrics.java
@@ -41,9 +41,9 @@ import java.util.concurrent.atomic.AtomicLong;
public class JvmGcMonitorMetrics implements IMetricSet {
// Duration of observation window
- public static final long OBSERVATION_WINDOW_MS = TimeUnit.MINUTES.toMillis(1);
+ public static final long OBSERVATION_WINDOW_MS = TimeUnit.SECONDS.toMillis(30);
// Interval for data collection
- public static final long SLEEP_INTERVAL_MS = TimeUnit.SECONDS.toMillis(5);
+ public static final long SLEEP_INTERVAL_MS = TimeUnit.SECONDS.toMillis(3);
// Max GC time threshold
public static final long MAX_GC_TIME_PERCENTAGE = 30L;
// The time when JvmGcMonitorMetrics start running
@@ -66,7 +66,7 @@ public class JvmGcMonitorMetrics implements IMetricSet {
// Hook function called with GC exception
private final GcTimeAlertHandler alertHandler;
- public JvmGcMonitorMetrics() {
+ private JvmGcMonitorMetrics() {
bufSize = (int) (OBSERVATION_WINDOW_MS / SLEEP_INTERVAL_MS + 2);
// Prevent the user from accidentally creating an abnormally big buffer, which will result in
// slow calculations and likely inaccuracy.
@@ -167,6 +167,10 @@ public class JvmGcMonitorMetrics implements IMetricSet {
/ Math.min(OBSERVATION_WINDOW_MS, gcMonitorRunTime)));
}
+ public GcData getGcData() {
+ return curData;
+ }
+
/** Encapsulates data about GC pauses measured at the specific timestamp. */
public static class GcData implements Cloneable {
// The time when this object get updated.
diff --git a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/cpu/CpuUsageMetrics.java
similarity index 94%
rename from iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java
rename to iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/cpu/CpuUsageMetrics.java
index 51116e9461e..d7a3f4e94e4 100644
--- a/iotdb-core/metrics/interface/src/main/java/org/apache/iotdb/metrics/metricsets/cpu/CpuUsageMetrics.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/cpu/CpuUsageMetrics.java
@@ -17,8 +17,9 @@
* under the License.
*/
-package org.apache.iotdb.metrics.metricsets.cpu;
+package org.apache.iotdb.commons.service.metric.cpu;
+import org.apache.iotdb.commons.service.metric.JvmGcMonitorMetrics;
import org.apache.iotdb.metrics.AbstractMetricService;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.metrics.metricsets.IMetricSet;
@@ -64,6 +65,9 @@ public class CpuUsageMetrics implements IMetricSet {
private AtomicLong lastUpdateTime = new AtomicLong(0L);
private AtomicLong updateCount = new AtomicLong(0);
+ private static final JvmGcMonitorMetrics.GcData gcData =
+ JvmGcMonitorMetrics.getInstance().getGcData();
+
public CpuUsageMetrics(
List<String> modules,
List<String> pools,
@@ -309,10 +313,17 @@ public class CpuUsageMetrics implements IMetricSet {
processCpuLoadGauge =
metricService.getAutoGauge("process_cpu_load", MetricLevel.CORE, "name", "process");
}
+ long gcTimePercentage = gcData.getGcTimePercentage();
double processCpuLoad = processCpuLoadGauge.getValue();
for (Map.Entry<String, Long> entry : moduleIncrementCpuTimeMap.entrySet()) {
moduleCpuTimePercentageMap.put(
- entry.getKey(), entry.getValue() * 1.0 / totalIncrementTime * processCpuLoad);
+ entry.getKey(),
+ entry.getValue()
+ * 1.0
+ / totalIncrementTime
+ * processCpuLoad
+ * (100L - gcTimePercentage) // gc time is not included in module cpu usage
+ / 100);
if (entry.getValue() > 0.0) {
moduleUserTimePercentageMap.put(
entry.getKey(),
@@ -323,7 +334,13 @@ public class CpuUsageMetrics implements IMetricSet {
}
for (Map.Entry<String, Long> entry : poolIncrementCpuTimeMap.entrySet()) {
poolCpuUsageMap.put(
- entry.getKey(), entry.getValue() * 1.0 / totalIncrementTime * processCpuLoad);
+ entry.getKey(),
+ entry.getValue()
+ * 1.0
+ / totalIncrementTime
+ * processCpuLoad
+ * (100L - gcTimePercentage) // gc time is not included in pool cpu usage
+ / 100);
if (entry.getValue() > 0.0) {
poolUserTimePercentageMap.put(
entry.getKey(),