增加cpu温度采集

This commit is contained in:
gaoyutao
2026-01-16 18:10:00 +08:00
parent f5c3ae500b
commit 158fddd0b2
2 changed files with 21 additions and 6 deletions
@@ -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;
@@ -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;
}
}
}