package org.gbif.checklistbank.utils; import java.util.TimerTask; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import com.google.common.base.Throwables; import static java.lang.management.ManagementFactory.getPlatformMBeanServer; /** * Monitors and reports regulary the number of open files and threads. */ public class ResourcesMonitor extends TimerTask { private MBeanServer jmx; private ObjectName osMBean; public ResourcesMonitor() { try { osMBean = ObjectName.getInstance("java.lang:type=OperatingSystem"); } catch (MalformedObjectNameException e) { Throwables.propagate(e); } jmx = getPlatformMBeanServer(); } @Override public void run() { System.out.println("OPEN FILES: " + getOpenFileDescriptorCount()); System.out.println("NUMBER OF THREADS: " + Thread.getAllStackTraces().size()); } public long getOpenFileDescriptorCount() { try { return (long) jmx.getAttribute(osMBean, "OpenFileDescriptorCount"); } catch (Exception e) { Throwables.propagate(e); } return -1; } }