All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jchanghong.system.oshi.OshiUtil Maven / Gradle / Ivy

The newest version!
package com.jchanghong.system.oshi;

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.ComputerSystem;
import oshi.hardware.GlobalMemory;
import oshi.hardware.HWDiskStore;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.hardware.NetworkIF;
import oshi.hardware.Sensors;
import oshi.software.os.OperatingSystem;
import oshi.util.Util;

import java.text.DecimalFormat;
import java.util.List;

/**
 * Oshi库封装的工具类,通过此工具类,可获取系统、硬件相关信息
 * 
 * 
 * 1、系统信息
 * 2、硬件信息
 * 
* * 相关内容见:https://github.com/oshi/oshi * * @author Looly * @since 4.6.4 */ public class OshiUtil { private static final SystemInfo systemInfo; /** 硬件信息 */ private static final HardwareAbstractionLayer hardware; /** 系统信息 */ private static final OperatingSystem os; static { systemInfo = new SystemInfo(); hardware = systemInfo.getHardware(); os = systemInfo.getOperatingSystem(); } /** * 获取操作系统相关信息,包括系统版本、文件系统、进程等 * * @return 操作系统相关信息 */ public static OperatingSystem getOs() { return os; } /** * 获取硬件相关信息,包括内存、硬盘、网络设备、显示器、USB、声卡等 * * @return 硬件相关信息 */ public static HardwareAbstractionLayer getHardware() { return hardware; } /** * 获取BIOS中计算机相关信息,比如序列号、固件版本等 * * @return 获取BIOS中计算机相关信息 */ public static ComputerSystem getSystem() { return hardware.getComputerSystem(); } /** * 获取内存相关信息,比如总内存、可用内存等 * * @return 内存相关信息 */ public static GlobalMemory getMemory() { return hardware.getMemory(); } /** * 获取CPU(处理器)相关信息,比如CPU负载等 * * @return CPU(处理器)相关信息 */ public static CentralProcessor getProcessor() { return hardware.getProcessor(); } /** * 获取传感器相关信息,例如CPU温度、风扇转速等,传感器可能有多个 * * @return 传感器相关信息 */ public static Sensors getSensors() { return hardware.getSensors(); } /** * 获取磁盘相关信息,可能有多个磁盘(包括可移动磁盘等) * * @return 磁盘相关信息 * @since 5.3.6 */ // public static List getDiskStores() { // return hardware.getDiskStores(); // } /** * 获取网络相关信息,可能多块网卡 * @return 网络相关信息 * @since 5.3.6 */ // public static List getNetworkIFs(){ // return hardware.getNetworkIFs(); // } // ------------------------------------------------------------------ cpu /** * 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息 * * @return 系统 CPU 使用率 等信息 */ public static CpuInfo getCpuInfo() { return getCpuInfo(1000); } /** * 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息 * * @param waitingTime 设置等待时间 * @return 系统 CPU 使用率 等信息 */ public static CpuInfo getCpuInfo(long waitingTime) { return getCpuInfo(OshiUtil.getProcessor(), waitingTime); } /** * 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息 * * @param processor {@link CentralProcessor} * @param waitingTime 设置等待时间 * @return 系统 CPU 使用率 等信息 */ private static CpuInfo getCpuInfo(CentralProcessor processor, long waitingTime) { CpuInfo cpuInfo = new CpuInfo(); // CPU信息 long[] prevTicks = processor.getSystemCpuLoadTicks(); // 这里必须要设置延迟 Util.sleep(waitingTime); long[] ticks = processor.getSystemCpuLoadTicks(); long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()]; long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()]; long softIrq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]; long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()]; long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()]; long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; long ioWait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()]; long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()]; long totalCpu = Math.max(user + nice + cSys + idle + ioWait + irq + softIrq + steal, 0); final DecimalFormat format = new DecimalFormat("#.00"); cpuInfo.setCpuNum(processor.getLogicalProcessorCount()); cpuInfo.setToTal(totalCpu); cpuInfo.setSys(Double.parseDouble(format.format(cSys <= 0 ? 0 : (100d * cSys / totalCpu)))); cpuInfo.setUsed(Double.parseDouble(format.format(user <= 0 ? 0 : (100d * user / totalCpu)))); if (totalCpu == 0) { cpuInfo.setWait(0); } else { cpuInfo.setWait(Double.parseDouble(format.format(100d * ioWait / totalCpu))); } cpuInfo.setFree(Double.parseDouble(format.format(idle <= 0 ? 0 : (100d * idle / totalCpu)))); cpuInfo.setCpuModel(processor.toString()); return cpuInfo; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy