增加cpu温度采集
This commit is contained in:
@@ -55,6 +55,9 @@ public class CpuVO implements Serializable {
|
|||||||
@Schema(description = "CPU用户进程所花费的时间:秒")
|
@Schema(description = "CPU用户进程所花费的时间:秒")
|
||||||
private double user;
|
private double user;
|
||||||
|
|
||||||
|
@Schema(description = "cpu温度")
|
||||||
|
private double temperature;
|
||||||
|
|
||||||
@Schema(description = "时间戳")
|
@Schema(description = "时间戳")
|
||||||
private long timestamp;
|
private long timestamp;
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import oshi.SystemInfo;
|
import oshi.SystemInfo;
|
||||||
import oshi.hardware.CentralProcessor;
|
import oshi.hardware.CentralProcessor;
|
||||||
import oshi.hardware.HardwareAbstractionLayer;
|
import oshi.hardware.HardwareAbstractionLayer;
|
||||||
|
import oshi.hardware.Sensors;
|
||||||
import oshi.software.os.OperatingSystem;
|
import oshi.software.os.OperatingSystem;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@@ -25,6 +26,7 @@ public class CPUServiceImpl implements CPUService {
|
|||||||
CentralProcessor processor = hal.getProcessor();
|
CentralProcessor processor = hal.getProcessor();
|
||||||
OperatingSystem os = si.getOperatingSystem();
|
OperatingSystem os = si.getOperatingSystem();
|
||||||
System.out.println("=========================================================");
|
System.out.println("=========================================================");
|
||||||
|
|
||||||
// 1. CPU基本信息
|
// 1. CPU基本信息
|
||||||
cpuVO.setNum(processor.getPhysicalProcessorCount()); // CUP数量
|
cpuVO.setNum(processor.getPhysicalProcessorCount()); // CUP数量
|
||||||
cpuVO.setCores(processor.getLogicalProcessorCount()); // CUP核数
|
cpuVO.setCores(processor.getLogicalProcessorCount()); // CUP核数
|
||||||
@@ -33,18 +35,25 @@ public class CPUServiceImpl implements CPUService {
|
|||||||
System.out.println("物理核心数: " + processor.getPhysicalProcessorCount());
|
System.out.println("物理核心数: " + processor.getPhysicalProcessorCount());
|
||||||
System.out.println("逻辑核心数: " + processor.getLogicalProcessorCount());
|
System.out.println("逻辑核心数: " + processor.getLogicalProcessorCount());
|
||||||
System.out.println("最大频率: " + processor.getMaxFreq() / 1_000_000.0 + " GHz");
|
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负载信息
|
// 2. CPU负载信息
|
||||||
System.out.println("\n=== CPU负载信息 ===");
|
System.out.println("\n=== CPU负载信息 ===");
|
||||||
double[] loadAverage = processor.getSystemLoadAverage(3);
|
double[] loadAverage = processor.getSystemLoadAverage(3);
|
||||||
cpuVO.setAvg1(loadAverage[0]);// CUP1分钟负载
|
cpuVO.setAvg1(loadAverage[0]);// CUP1分钟负载
|
||||||
cpuVO.setAvg1(loadAverage[1]);// CUP5分钟负载
|
cpuVO.setAvg5(loadAverage[1]);// CUP5分钟负载
|
||||||
cpuVO.setAvg1(loadAverage[2]);// CUP15分钟负载
|
cpuVO.setAvg15(loadAverage[2]);// CUP15分钟负载
|
||||||
System.out.println("1分钟平均负载: " + loadAverage[0]);
|
System.out.println("1分钟平均负载: " + loadAverage[0]);
|
||||||
System.out.println("5分钟平均负载: " + loadAverage[1]);
|
System.out.println("5分钟平均负载: " + loadAverage[1]);
|
||||||
System.out.println("15分钟平均负载: " + loadAverage[2]);
|
System.out.println("15分钟平均负载: " + loadAverage[2]);
|
||||||
|
|
||||||
// 3. CPU使用率(需要两次采样)
|
// 3. CPU使用率(需要两次采样)
|
||||||
AssertLog.info("\n=== CPU使用率 ===");
|
AssertLog.info("\n=== CPU使用率 ===");
|
||||||
// System.out.println("\n=== CPU使用率 ===");
|
|
||||||
|
|
||||||
// 预热:第一次调用可能不准
|
// 预热:第一次调用可能不准
|
||||||
processor.getSystemCpuLoadBetweenTicks(processor.getSystemCpuLoadTicks());
|
processor.getSystemCpuLoadBetweenTicks(processor.getSystemCpuLoadTicks());
|
||||||
@@ -78,7 +87,7 @@ public class CPUServiceImpl implements CPUService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
AssertLog.info("CPU 使用率: {}%",cpuUsage * 100);
|
AssertLog.info("CPU 使用率: {}%",cpuUsage * 100);
|
||||||
// System.out.printf("CPU 使用率: %.2f%%\n", cpuUsage * 100);
|
|
||||||
long[] ticks = processor.getSystemCpuLoadTicks();
|
long[] ticks = processor.getSystemCpuLoadTicks();
|
||||||
long user = ticks[CentralProcessor.TickType.USER.getIndex()] -
|
long user = ticks[CentralProcessor.TickType.USER.getIndex()] -
|
||||||
prevTicks[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()] -
|
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] -
|
||||||
prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
|
prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
|
||||||
long total = user + nice + sys + idle + iowait + irq + softirq + steal;
|
long total = user + nice + sys + idle + iowait + irq + softirq + steal;
|
||||||
|
|
||||||
// 4. CPU时间累计值
|
// 4. CPU时间累计值
|
||||||
System.out.println("\n=== CPU时间累计值 ===");
|
System.out.println("\n=== CPU时间累计值 ===");
|
||||||
long[] allTicks = processor.getSystemCpuLoadTicks();
|
long[] allTicks = processor.getSystemCpuLoadTicks();
|
||||||
System.out.println("中断累计时间: " + AgentUtil.ticksToSeconds((allTicks[CentralProcessor.TickType.IRQ.getIndex()] +
|
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("空闲累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.IDLE.getIndex()]));
|
||||||
System.out.println("I/O等待时间(CPU等待响应时间): " + AgentUtil.ticksToSeconds(iowait));
|
System.out.println("I/O等待时间(CPU等待响应时间): " + AgentUtil.ticksToSeconds(iowait));
|
||||||
System.out.println("系统累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.SYSTEM.getIndex()]));
|
System.out.println("系统累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.SYSTEM.getIndex()]));
|
||||||
long softwareTime = sys - irq - softirq;
|
long softwareTime = sys - irq - softirq;
|
||||||
System.out.println("软件相关时间(近似无响应时间): " + AgentUtil.ticksToSeconds(softwareTime));
|
System.out.println("软件相关时间(近似无响应时间): " + AgentUtil.ticksToSeconds(softwareTime));
|
||||||
System.out.println("用户进程累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.USER.getIndex()]));
|
System.out.println("用户进程累计时间: " + AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.USER.getIndex()]));
|
||||||
|
|
||||||
cpuVO.setInterrupt(AgentUtil.ticksToSeconds((allTicks[CentralProcessor.TickType.IRQ.getIndex()] +
|
cpuVO.setInterrupt(AgentUtil.ticksToSeconds((allTicks[CentralProcessor.TickType.IRQ.getIndex()] +
|
||||||
allTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]))); // CPU硬件中断提供服务时间:秒
|
allTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]))); // CPU硬件中断提供服务时间:秒
|
||||||
cpuVO.setIdle(AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.IDLE.getIndex()]));// CPU空闲时间:秒
|
cpuVO.setIdle(AgentUtil.ticksToSeconds(allTicks[CentralProcessor.TickType.IDLE.getIndex()]));// CPU空闲时间:秒
|
||||||
@@ -120,6 +131,7 @@ public class CPUServiceImpl implements CPUService {
|
|||||||
long uptime = os.getSystemUptime();
|
long uptime = os.getSystemUptime();
|
||||||
cpuVO.setNormal(uptime);// CPU正常运行时间:秒
|
cpuVO.setNormal(uptime);// CPU正常运行时间:秒
|
||||||
System.out.println("CPU正常运行时间: " + cpuVO.getNormal());
|
System.out.println("CPU正常运行时间: " + cpuVO.getNormal());
|
||||||
|
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user