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(); } }