Skip to content

Commit 6fae8ca

Browse files
committed
[FLINK-37709][metrics] add file descriptor jvm metrics
1 parent 932fd59 commit 6fae8ca

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

flink-runtime/src/main/java/org/apache/flink/runtime/metrics/MetricNames.java

+3
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ private MetricNames() {}
5858
public static final String MEMORY_COMMITTED = "Committed";
5959
public static final String MEMORY_MAX = "Max";
6060

61+
public static final String FILE_DESCRIPTOR_MAX = "Max";
62+
public static final String FILE_DESCRIPTOR_OPEN = "Open";
63+
6164
public static final String IS_BACK_PRESSURED = "isBackPressured";
6265

6366
public static final String CHECKPOINT_ALIGNMENT_TIME = "checkpointAlignmentTime";

flink-runtime/src/main/java/org/apache/flink/runtime/metrics/util/MetricUtils.java

+25
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public static void instantiateStatusMetrics(MetricGroup metricGroup) {
139139
instantiateMemoryMetrics(jvm.addGroup(METRIC_GROUP_MEMORY));
140140
instantiateThreadMetrics(jvm.addGroup("Threads"));
141141
instantiateCPUMetrics(jvm.addGroup("CPU"));
142+
instantiateFileDescriptorMetrics(jvm.addGroup("FileDescriptor"));
142143
}
143144

144145
public static void instantiateFlinkMemoryMetricGroup(
@@ -338,6 +339,30 @@ static void instantiateMetaspaceMemoryMetrics(final MetricGroup parentMetricGrou
338339
}
339340
}
340341

342+
static void instantiateFileDescriptorMetrics(MetricGroup metrics) {
343+
try {
344+
final com.sun.management.OperatingSystemMXBean mxBean =
345+
(com.sun.management.OperatingSystemMXBean)
346+
ManagementFactory.getOperatingSystemMXBean();
347+
348+
if (mxBean instanceof com.sun.management.UnixOperatingSystemMXBean) {
349+
com.sun.management.UnixOperatingSystemMXBean unixMXBean =
350+
(com.sun.management.UnixOperatingSystemMXBean) mxBean;
351+
metrics.<Long, Gauge<Long>>gauge("Max", unixMXBean::getMaxFileDescriptorCount);
352+
metrics.<Long, Gauge<Long>>gauge("Open", unixMXBean::getOpenFileDescriptorCount);
353+
354+
} else {
355+
throw new UnsupportedOperationException(
356+
"Can't find com.sun.management.UnixOperatingSystemMXBean in JVM.");
357+
}
358+
} catch (Exception e) {
359+
LOG.warn(
360+
"Cannot access com.sun.management.UnixOperatingSystemMXBean.getOpenFileDescriptorCount()"
361+
+ " - FileDescriptor metrics will not be available.",
362+
e);
363+
}
364+
}
365+
341366
private static void instantiateMemoryUsageMetrics(
342367
final MetricGroup metricGroup, final Supplier<MemoryUsage> memoryUsageSupplier) {
343368
metricGroup.<Long, Gauge<Long>>gauge(

flink-runtime/src/test/java/org/apache/flink/runtime/metrics/util/MetricUtilsTest.java

+10
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,16 @@ void testHeapMetricsCompleteness() {
177177
assertThat(heapMetrics.get(MetricNames.MEMORY_MAX)).isNotNull();
178178
}
179179

180+
@Test
181+
void testFileDescriptorMetricsCompleteness() {
182+
final InterceptingOperatorMetricGroup heapMetrics = new InterceptingOperatorMetricGroup();
183+
184+
MetricUtils.instantiateFileDescriptorMetrics(heapMetrics);
185+
186+
assertThat(heapMetrics.get(MetricNames.FILE_DESCRIPTOR_MAX)).isNotNull();
187+
assertThat(heapMetrics.get(MetricNames.FILE_DESCRIPTOR_OPEN)).isNotNull();
188+
}
189+
180190
/**
181191
* Tests that heap/non-heap metrics do not rely on a static MemoryUsage instance.
182192
*

0 commit comments

Comments
 (0)