diff --git a/src/main/java/com/tongran/agent/client/core/vo/CpuVO.java b/src/main/java/com/tongran/agent/client/core/vo/CpuVO.java index 009a6a2..bd824fa 100644 --- a/src/main/java/com/tongran/agent/client/core/vo/CpuVO.java +++ b/src/main/java/com/tongran/agent/client/core/vo/CpuVO.java @@ -55,6 +55,9 @@ public class CpuVO implements Serializable { @Schema(description = "CPU用户进程所花费的时间:秒") private double user; + @Schema(description = "cpu温度") + private double temperature; + @Schema(description = "时间戳") private long timestamp; diff --git a/src/main/java/com/tongran/agent/client/service/impl/CPUServiceImpl.java b/src/main/java/com/tongran/agent/client/service/impl/CPUServiceImpl.java index eb5e86b..7ea8fe3 100644 --- a/src/main/java/com/tongran/agent/client/service/impl/CPUServiceImpl.java +++ b/src/main/java/com/tongran/agent/client/service/impl/CPUServiceImpl.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.Sensors; import oshi.software.os.OperatingSystem; import java.util.concurrent.TimeUnit; @@ -25,6 +26,7 @@ public class CPUServiceImpl implements CPUService { CentralProcessor processor = hal.getProcessor(); OperatingSystem os = si.getOperatingSystem(); System.out.println("========================================================="); + // 1. CPU基本信息 cpuVO.setNum(processor.getPhysicalProcessorCount()); // CUP数量 cpuVO.setCores(processor.getLogicalProcessorCount()); // CUP核数 @@ -33,18 +35,25 @@ public class CPUServiceImpl implements CPUService { System.out.println("物理核心数: " + processor.getPhysicalProcessorCount()); System.out.println("逻辑核心数: " + processor.getLogicalProcessorCount()); System.out.println("最大频率: " + processor.getMaxFreq() / 1_000_000.0 + " GHz"); + + // 1.1 CPU温度信息 + Sensors sensors = hal.getSensors(); + double cpuTemperature = sensors.getCpuTemperature(); + cpuVO.setTemperature(cpuTemperature); + System.out.println("CPU温度: " + (cpuTemperature > 0 ? String.format("%.1f°C", cpuTemperature) : "N/A")); + // 2. CPU负载信息 System.out.println("\n=== CPU负载信息 ==="); double[] loadAverage = processor.getSystemLoadAverage(3); cpuVO.setAvg1(loadAverage[0]);// CUP1分钟负载 - cpuVO.setAvg1(loadAverage[1]);// CUP5分钟负载 - cpuVO.setAvg1(loadAverage[2]);// CUP15分钟负载 + cpuVO.setAvg5(loadAverage[1]);// CUP5分钟负载 + cpuVO.setAvg15(loadAverage[2]);// CUP15分钟负载 System.out.println("1分钟平均负载: " + loadAverage[0]); System.out.println("5分钟平均负载: " + loadAverage[1]); System.out.println("15分钟平均负载: " + loadAverage[2]); + // 3. CPU使用率(需要两次采样) AssertLog.info("\n=== CPU使用率 ==="); -// System.out.println("\n=== CPU使用率 ==="); // 预热:第一次调用可能不准 processor.getSystemCpuLoadBetweenTicks(processor.getSystemCpuLoadTicks()); @@ -78,7 +87,7 @@ public class CPUServiceImpl implements CPUService { } } AssertLog.info("CPU 使用率: {}%",cpuUsage * 100); -// System.out.printf("CPU 使用率: %.2f%%\n", cpuUsage * 100); + long[] ticks = processor.getSystemCpuLoadTicks(); long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; @@ -97,17 +106,19 @@ public class CPUServiceImpl implements CPUService { long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()]; long total = user + nice + sys + idle + iowait + irq + softirq + steal; + // 4. CPU时间累计值 System.out.println("\n=== CPU时间累计值 ==="); long[] allTicks = processor.getSystemCpuLoadTicks(); System.out.println("中断累计时间: " + AgentUtil.ticksToSeconds((allTicks[CentralProcessor.TickType.IRQ.getIndex()] + - allTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]))); + allTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]))); System.out.println("空闲累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.IDLE.getIndex()])); System.out.println("I/O等待时间(CPU等待响应时间): " + AgentUtil.ticksToSeconds(iowait)); System.out.println("系统累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.SYSTEM.getIndex()])); long softwareTime = sys - irq - softirq; System.out.println("软件相关时间(近似无响应时间): " + AgentUtil.ticksToSeconds(softwareTime)); System.out.println("用户进程累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.USER.getIndex()])); + cpuVO.setInterrupt(AgentUtil.ticksToSeconds((allTicks[CentralProcessor.TickType.IRQ.getIndex()] + allTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]))); // CPU硬件中断提供服务时间:秒 cpuVO.setIdle(AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.IDLE.getIndex()]));// CPU空闲时间:秒 @@ -120,9 +131,10 @@ public class CPUServiceImpl implements CPUService { long uptime = os.getSystemUptime(); cpuVO.setNormal(uptime);// CPU正常运行时间:秒 System.out.println("CPU正常运行时间: " + cpuVO.getNormal()); + } catch (InterruptedException e) { e.printStackTrace(); } return cpuVO; } -} +} \ No newline at end of file