This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 1c61b548ac NIFI-15555 Added non-heap used tracking to Prometheus
Metrics (#10858)
1c61b548ac is described below
commit 1c61b548acee16ef5bfa53781807531a222033f8
Author: Pierre Villard <[email protected]>
AuthorDate: Thu Feb 5 22:34:41 2026 +0100
NIFI-15555 Added non-heap used tracking to Prometheus Metrics (#10858)
Signed-off-by: David Handermann <[email protected]>
---
.../org/apache/nifi/metrics/jvm/JmxJvmMetrics.java | 12 ++++++++++++
.../java/org/apache/nifi/metrics/jvm/JvmMetrics.java | 18 ++++++++++++++++++
.../apache/nifi/prometheusutil/JvmMetricsRegistry.java | 18 ++++++++++++++++++
.../nifi/prometheusutil/PrometheusMetricsUtil.java | 3 +++
4 files changed, 51 insertions(+)
diff --git
a/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JmxJvmMetrics.java
b/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JmxJvmMetrics.java
index cb9e727d24..fe939e7c00 100644
---
a/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JmxJvmMetrics.java
+++
b/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JmxJvmMetrics.java
@@ -54,6 +54,8 @@ public class JmxJvmMetrics implements JvmMetrics {
static final String MEMORY_HEAP_MAX = REGISTRY_METRICSET_MEMORY +
".heap.max";
static final String MEMORY_HEAP_COMMITTED = REGISTRY_METRICSET_MEMORY +
".heap.committed";
static final String MEMORY_HEAP_USAGE = REGISTRY_METRICSET_MEMORY +
".heap.usage";
+ static final String MEMORY_NON_HEAP_USED = REGISTRY_METRICSET_MEMORY +
".non-heap.used";
+ static final String MEMORY_NON_HEAP_COMMITTED = REGISTRY_METRICSET_MEMORY
+ ".non-heap.committed";
static final String MEMORY_NON_HEAP_USAGE = REGISTRY_METRICSET_MEMORY +
".non-heap.usage";
static final String THREADS_COUNT = REGISTRY_METRICSET_THREADS + ".count";
static final String THREADS_DAEMON_COUNT = REGISTRY_METRICSET_THREADS +
".daemon.count";
@@ -149,6 +151,16 @@ public class JmxJvmMetrics implements JvmMetrics {
return usage < 0 ? -1.0 : usage;
}
+ @Override
+ public double nonHeapUsed(DataUnit dataUnit) {
+ return (dataUnit == null ? DataUnit.B : dataUnit).convert((Long)
getMetric(MEMORY_NON_HEAP_USED), DataUnit.B);
+ }
+
+ @Override
+ public double nonHeapCommitted(DataUnit dataUnit) {
+ return (dataUnit == null ? DataUnit.B : dataUnit).convert((Long)
getMetric(MEMORY_NON_HEAP_COMMITTED), DataUnit.B);
+ }
+
@Override
public Map<String, Double> memoryPoolUsage() {
Set<String> poolNames = getMetricNames(MEMORY_POOLS);
diff --git
a/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JvmMetrics.java
b/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JvmMetrics.java
index 4e6177b49a..ee2acd54db 100644
---
a/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JvmMetrics.java
+++
b/nifi-commons/nifi-metrics/src/main/java/org/apache/nifi/metrics/jvm/JvmMetrics.java
@@ -115,6 +115,24 @@ public interface JvmMetrics {
*/
double nonHeapUsage();
+ /**
+ * Returns the non-heap memory currently used by the current JVM.
+ *
+ * @param dataUnit The {@link DataUnit} to which the metric will be
converted
+ *
+ * @return Non-heap memory currently used by JVM in the given {@link
DataUnit}
+ */
+ double nonHeapUsed(DataUnit dataUnit);
+
+ /**
+ * Returns the non-heap memory committed to the JVM.
+ *
+ * @param dataUnit The {@link DataUnit} to which the metric will be
converted
+ *
+ * @return Non-heap memory currently committed to the JVM in the given
{@link DataUnit}
+ */
+ double nonHeapCommitted(DataUnit dataUnit);
+
/**
* Returns a map of memory pool names to the percentage of that pool which
is being used.
*
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/JvmMetricsRegistry.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/JvmMetricsRegistry.java
index 352f500900..44003b66af 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/JvmMetricsRegistry.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/JvmMetricsRegistry.java
@@ -37,12 +37,30 @@ public class JvmMetricsRegistry extends
AbstractMetricsRegistry {
.labelNames("instance")
.register(registry));
+ nameToGaugeMap.put("JVM_HEAP_COMMITTED", Gauge.build()
+ .name("nifi_jvm_heap_committed")
+ .help("NiFi JVM heap memory committed in bytes")
+ .labelNames("instance")
+ .register(registry));
+
nameToGaugeMap.put("JVM_HEAP_NON_USAGE", Gauge.build()
.name("nifi_jvm_heap_non_usage")
.help("NiFi JVM heap non usage")
.labelNames("instance")
.register(registry));
+ nameToGaugeMap.put("JVM_NON_HEAP_USED", Gauge.build()
+ .name("nifi_jvm_non_heap_used")
+ .help("NiFi JVM non-heap memory used in bytes")
+ .labelNames("instance")
+ .register(registry));
+
+ nameToGaugeMap.put("JVM_NON_HEAP_COMMITTED", Gauge.build()
+ .name("nifi_jvm_non_heap_committed")
+ .help("NiFi JVM non-heap memory committed in bytes")
+ .labelNames("instance")
+ .register(registry));
+
nameToGaugeMap.put("JVM_THREAD_COUNT", Gauge.build()
.name("nifi_jvm_thread_count")
.help("NiFi JVM thread count")
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/PrometheusMetricsUtil.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/PrometheusMetricsUtil.java
index 70a75887ce..5ce379ae15 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/PrometheusMetricsUtil.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/prometheusutil/PrometheusMetricsUtil.java
@@ -266,7 +266,10 @@ public class PrometheusMetricsUtil {
final String instanceId = StringUtils.isEmpty(instId) ?
DEFAULT_LABEL_STRING : instId;
jvmMetricsRegistry.setDataPoint(jvmMetrics.heapUsed(DataUnit.B),
"JVM_HEAP_USED", instanceId);
jvmMetricsRegistry.setDataPoint(jvmMetrics.heapUsage(),
"JVM_HEAP_USAGE", instanceId);
+ jvmMetricsRegistry.setDataPoint(jvmMetrics.heapCommitted(DataUnit.B),
"JVM_HEAP_COMMITTED", instanceId);
jvmMetricsRegistry.setDataPoint(jvmMetrics.nonHeapUsage(),
"JVM_HEAP_NON_USAGE", instanceId);
+ jvmMetricsRegistry.setDataPoint(jvmMetrics.nonHeapUsed(DataUnit.B),
"JVM_NON_HEAP_USED", instanceId);
+
jvmMetricsRegistry.setDataPoint(jvmMetrics.nonHeapCommitted(DataUnit.B),
"JVM_NON_HEAP_COMMITTED", instanceId);
jvmMetricsRegistry.setDataPoint(jvmMetrics.threadCount(),
"JVM_THREAD_COUNT", instanceId);
jvmMetricsRegistry.setDataPoint(jvmMetrics.daemonThreadCount(),
"JVM_DAEMON_THREAD_COUNT", instanceId);
jvmMetricsRegistry.setDataPoint(jvmMetrics.uptime(), "JVM_UPTIME",
instanceId);