/** * 开源代码,仅供学习和交流研究使用,商用请联系三丙 * 微信:mohan_88888 * 抖音:程序员三丙 * 付费课程知识星球:https://t.zsxq.com/aKtXo */ package sanbing.jcpp.infrastructure.util; import lombok.extern.slf4j.Slf4j; import oshi.SystemInfo; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.file.FileStore; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Optional; @Slf4j public class SystemUtil { private static final HardwareAbstractionLayer HARDWARE; static { HARDWARE = new SystemInfo().getHardware(); } public static Optional getMemoryUsage() { try { GlobalMemory memory = HARDWARE.getMemory(); long total = memory.getTotal(); long available = memory.getAvailable(); return Optional.of(toPercent(total - available, total)); } catch (Throwable e) { log.debug("Failed to get memory usage!!!", e); } return Optional.empty(); } public static Optional getTotalMemory() { try { return Optional.of(HARDWARE.getMemory().getTotal()); } catch (Throwable e) { log.debug("Failed to get total memory!!!", e); } return Optional.empty(); } public static Optional getCpuUsage() { try { return Optional.of((int) (HARDWARE.getProcessor().getSystemCpuLoad(1000) * 100.0)); } catch (Throwable e) { log.debug("Failed to get cpu usage!!!", e); } return Optional.empty(); } public static Optional getCpuCount() { try { return Optional.of(HARDWARE.getProcessor().getLogicalProcessorCount()); } catch (Throwable e) { log.debug("Failed to get total cpu count!!!", e); } return Optional.empty(); } public static Optional getDiscSpaceUsage() { try { FileStore store = Files.getFileStore(Paths.get("/")); long total = store.getTotalSpace(); long available = store.getUsableSpace(); return Optional.of(toPercent(total - available, total)); } catch (Throwable e) { log.debug("Failed to get free disc space!!!", e); } return Optional.empty(); } public static Optional getTotalDiscSpace() { try { FileStore store = Files.getFileStore(Paths.get("/")); return Optional.of(store.getTotalSpace()); } catch (Throwable e) { log.debug("Failed to get total disc space!!!", e); } return Optional.empty(); } private static int toPercent(long used, long total) { BigDecimal u = new BigDecimal(used); BigDecimal t = new BigDecimal(total); BigDecimal i = new BigDecimal(100); return u.multiply(i).divide(t, RoundingMode.HALF_UP).intValue(); } }