This is an automated email from the ASF dual-hosted git repository. joewitt pushed a commit to branch support/nifi-1.13 in repository https://gitbox.apache.org/repos/asf/nifi.git
commit 0394f687aaf76684fbbaecceea30da0b1f97c125 Author: Matthew Burgess <[email protected]> AuthorDate: Fri Jan 29 18:38:53 2021 -0500 NIFI-3383 Check if usage operations are supported in MonitorMemory This closes #4790 Signed-off-by: Joey Frazee <[email protected]> --- .../java/org/apache/nifi/controller/MonitorMemory.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java index 7f6028d..a723a88 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-reporting-tasks/src/main/java/org/apache/nifi/controller/MonitorMemory.java @@ -19,6 +19,7 @@ package org.apache.nifi.controller; import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.annotation.lifecycle.OnScheduled; +import org.apache.nifi.annotation.lifecycle.OnStopped; import org.apache.nifi.components.AllowableValue; import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; @@ -39,6 +40,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * Reporting task used to monitor usage of memory after Garbage Collection has @@ -91,7 +93,8 @@ public class MonitorMemory extends AbstractReportingTask { private static final AllowableValue[] memPoolAllowableValues; static { - List<MemoryPoolMXBean> memoryPoolBeans = ManagementFactory.getMemoryPoolMXBeans(); + // Only allow memory pool beans that support usage thresholds, otherwise we wouldn't report anything anyway + List<MemoryPoolMXBean> memoryPoolBeans = ManagementFactory.getMemoryPoolMXBeans().stream().filter(MemoryPoolMXBean::isUsageThresholdSupported).collect(Collectors.toList()); memPoolAllowableValues = new AllowableValue[memoryPoolBeans.size()]; for (int i = 0; i < memPoolAllowableValues.length; i++) { memPoolAllowableValues[i] = new AllowableValue(memoryPoolBeans.get(i).getName()); @@ -175,7 +178,9 @@ public class MonitorMemory extends AbstractReportingTask { final double pct = Double.parseDouble(percentage) / 100D; calculatedThreshold = (long) (monitoredBean.getUsage().getMax() * pct); } - monitoredBean.setUsageThreshold(calculatedThreshold); + if (monitoredBean.isUsageThresholdSupported()) { + monitoredBean.setUsageThreshold(calculatedThreshold); + } } } } @@ -200,7 +205,7 @@ public class MonitorMemory extends AbstractReportingTask { } final double percentageUsed = (double) usage.getUsed() / (double) usage.getMax() * 100D; - if (bean.isUsageThresholdExceeded()) { + if (bean.isUsageThresholdSupported() && bean.isUsageThresholdExceeded()) { if (System.currentTimeMillis() < reportingIntervalMillis + lastReportTime && lastReportTime > 0L) { return; } @@ -223,6 +228,11 @@ public class MonitorMemory extends AbstractReportingTask { } } + @OnStopped + public void onStopped() { + monitoredBean = null; + } + private static class ThresholdValidator implements Validator { @Override
