增加cpu温度采集
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user