diff options
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/FdCounter.java')
| -rw-r--r-- | src/main/java/com/it_jaros/networkScanner/FdCounter.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/FdCounter.java b/src/main/java/com/it_jaros/networkScanner/FdCounter.java new file mode 100644 index 0000000..05eb9a4 --- /dev/null +++ b/src/main/java/com/it_jaros/networkScanner/FdCounter.java @@ -0,0 +1,37 @@ +package com.it_jaros.networkScanner; + +import java.lang.management.ManagementFactory; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +import com.sun.management.UnixOperatingSystemMXBean; + +public final class FdCounter implements AutoCloseable { + private final UnixOperatingSystemMXBean os = + (UnixOperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + private final ScheduledExecutorService ses = + Executors.newSingleThreadScheduledExecutor(Thread.ofPlatform().daemon().factory()); + private final AtomicLong peak = new AtomicLong(0); + + public void start(long everyMillis) { + ses.scheduleAtFixedRate(() -> { + long now = os.getOpenFileDescriptorCount(); + peak.accumulateAndGet(now, Math::max); + }, 0, everyMillis, TimeUnit.MILLISECONDS); + } + + public long peakOpenFds() { + return peak.get(); + } + + public long maxFds() { + return os.getMaxFileDescriptorCount(); + } + + @Override public void close() { + ses.shutdownNow(); + } +} + |
