1.监控策略配置文件格式优化

This commit is contained in:
qiminbao
2025-10-30 19:31:12 +08:00
parent c4bb76049a
commit ae5c50e5b4
4 changed files with 128 additions and 46 deletions
@@ -0,0 +1,70 @@
package com.tongran.agent.client.utils;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class CpuUsageFromProcStat {
private static final String PROC_STAT = "/proc/stat";
private static long[] prevCpuTime = null;
public static double getCpuUsage() throws Exception {
List<String> lines = Files.readAllLines(Paths.get(PROC_STAT));
for (String line : lines) {
if (line.startsWith("cpu ")) {
long[] current = parseCpuLine(line);
if (prevCpuTime == null) {
prevCpuTime = current;
Thread.sleep(500); // 初始等待
return 0.0; // 第一次不返回数据
}
double usage = calculateCpuUsage(prevCpuTime, current);
prevCpuTime = current; // 更新
return usage;
}
}
throw new RuntimeException("无法读取 /proc/stat 中的 cpu 数据");
}
private static long[] parseCpuLine(String line) {
String[] parts = line.split("\\s+");
// index: user, nice, system, idle, iowait, irq, softirq, steal
long user = Long.parseLong(parts[1]);
long nice = Long.parseLong(parts[2]);
long system = Long.parseLong(parts[3]);
long idle = Long.parseLong(parts[4]);
long iowait = Long.parseLong(parts[5]);
long irq = Long.parseLong(parts[6]);
long softirq = Long.parseLong(parts[7]);
long idleTotal = idle + iowait;
long systemTotal = user + nice + system + irq + softirq;
long total = idleTotal + systemTotal;
return new long[]{idleTotal, total};
}
private static double calculateCpuUsage(long[] prev, long[] curr) {
long idleDiff = curr[0] - prev[0];
long totalDiff = curr[1] - prev[1];
if (totalDiff <= 0) return 0.0;
return 1.0 - ((double) idleDiff / totalDiff);
}
public static void main(String[] args) throws Exception {
// 预热
getCpuUsage();
Thread.sleep(1000);
// 正式采集
for (int i = 0; i < 5; i++) {
double usage = getCpuUsage();
System.out.printf("CPU 使用率: %.2f%%\n", usage * 100);
Thread.sleep(2000);
}
}
}