diff --git a/hutool-system/pom.xml b/hutool-system/pom.xml
index 7674a417e..2d18d2fad 100644
--- a/hutool-system/pom.xml
+++ b/hutool-system/pom.xml
@@ -16,6 +16,10 @@
* 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 {
@@ -43,16 +46,26 @@ public class OshiUtil {
/**
* 获取操作系统相关信息,包括系统版本、文件系统、进程等
- *
+ *
* @return 操作系统相关信息
*/
public static OperatingSystem getOs() {
return os;
}
+ /**
+ * 获取当前进程信息{@link OSProcess}
+ *
+ * @return 进程信息 {@link OSProcess}
+ * @since 5.7.12
+ */
+ public static OSProcess getCurrentProcess() {
+ return os.getProcess(os.getProcessId());
+ }
+
/**
* 获取硬件相关信息,包括内存、硬盘、网络设备、显示器、USB、声卡等
- *
+ *
* @return 硬件相关信息
*/
public static HardwareAbstractionLayer getHardware() {
@@ -61,7 +74,7 @@ public class OshiUtil {
/**
* 获取BIOS中计算机相关信息,比如序列号、固件版本等
- *
+ *
* @return 获取BIOS中计算机相关信息
*/
public static ComputerSystem getSystem() {
@@ -70,7 +83,7 @@ public class OshiUtil {
/**
* 获取内存相关信息,比如总内存、可用内存等
- *
+ *
* @return 内存相关信息
*/
public static GlobalMemory getMemory() {
@@ -79,7 +92,7 @@ public class OshiUtil {
/**
* 获取CPU(处理器)相关信息,比如CPU负载等
- *
+ *
* @return CPU(处理器)相关信息
*/
public static CentralProcessor getProcessor() {
@@ -88,7 +101,7 @@ public class OshiUtil {
/**
* 获取传感器相关信息,例如CPU温度、风扇转速等,传感器可能有多个
- *
+ *
* @return 传感器相关信息
*/
public static Sensors getSensors() {
@@ -97,7 +110,7 @@ public class OshiUtil {
/**
* 获取磁盘相关信息,可能有多个磁盘(包括可移动磁盘等)
- *
+ *
* @return 磁盘相关信息
* @since 5.3.6
*/
@@ -107,17 +120,19 @@ public class OshiUtil {
/**
* 获取网络相关信息,可能多块网卡
+ *
* @return 网络相关信息
* @since 5.3.6
*/
- public static List
+ * 默认间隔1秒
*
* @return 系统 CPU 使用率 等信息
*/
@@ -128,48 +143,10 @@ public class OshiUtil {
/**
* 获取系统CPU 系统使用率、用户使用率、利用率等等 相关信息
*
- * @param waitingTime 设置等待时间
+ * @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;
+ return new CpuInfo(OshiUtil.getProcessor(), waitingTime);
}
}
diff --git a/hutool-system/src/test/java/cn/hutool/system/OshiTest.java b/hutool-system/src/test/java/cn/hutool/system/OshiTest.java
index abe378729..88abfdced 100644
--- a/hutool-system/src/test/java/cn/hutool/system/OshiTest.java
+++ b/hutool-system/src/test/java/cn/hutool/system/OshiTest.java
@@ -4,7 +4,11 @@ import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import org.junit.Assert;
import org.junit.Test;
+import oshi.software.os.OSProcess;
+/**
+ * 测试参考:https://github.com/oshi/oshi/blob/master/oshi-core/src/test/java/oshi/SystemInfoTest.java
+ */
public class OshiTest {
@Test
@@ -18,4 +22,10 @@ public class OshiTest {
CpuInfo cpuInfo = OshiUtil.getCpuInfo();
Assert.assertNotNull(cpuInfo);
}
+
+ @Test
+ public void getCurrentProcessTest() {
+ final OSProcess currentProcess = OshiUtil.getCurrentProcess();
+ Assert.assertEquals("java", currentProcess.getName());
+ }
}