package org.apereo.cas.monitor; /** * Monitors JVM memory usage. * * @author Marvin S. Addison * @since 3.5.0 */ public class MemoryMonitor implements Monitor<MemoryStatus> { private static final int PERCENTAGE_VALUE = 100; /** Percent free memory below which a warning is reported. */ private final long freeMemoryWarnThreshold; public MemoryMonitor(final long threshold) { if (threshold < 0) { throw new IllegalArgumentException("Warning threshold must be non-negative."); } this.freeMemoryWarnThreshold = threshold; } @Override public String getName() { return MemoryMonitor.class.getSimpleName(); } @Override public MemoryStatus observe() { final StatusCode code; final long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); final long total = Runtime.getRuntime().maxMemory(); final long free = total - used; if (free * PERCENTAGE_VALUE / total < this.freeMemoryWarnThreshold) { code = StatusCode.WARN; } else { code = StatusCode.OK; } return new MemoryStatus(code, free, total, used); } }