시스템 사용율 모니터링 기능 테스트 #160
@@ -98,7 +98,7 @@ public class GpuDmonReader {
|
|||||||
while ((line = br.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
|
|
||||||
// 디버깅 로그
|
// 디버깅 로그
|
||||||
log.info("RAW: [{}]", line);
|
// log.info("RAW: [{}]", line);
|
||||||
|
|
||||||
// 헤더 제거
|
// 헤더 제거
|
||||||
if (line.startsWith("#")) continue;
|
if (line.startsWith("#")) continue;
|
||||||
@@ -121,8 +121,6 @@ public class GpuDmonReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gpuUtilMap.put(index, util);
|
gpuUtilMap.put(index, util);
|
||||||
// GPU 값 들어오는지 확인 디버깅
|
|
||||||
log.info("GPU UPDATE → index={}, util={}", index, util);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,53 +91,44 @@ public class SystemMonitorService {
|
|||||||
// =========================
|
// =========================
|
||||||
private double readCpu() throws Exception {
|
private double readCpu() throws Exception {
|
||||||
|
|
||||||
// linux 환경일때만 실행
|
if (!isLinux()) return 0;
|
||||||
if (!isLinux()) {
|
|
||||||
return 0; // 또는 -1
|
|
||||||
}
|
|
||||||
|
|
||||||
BufferedReader br = new BufferedReader(new FileReader("/proc/stat"));
|
try (BufferedReader br = new BufferedReader(new FileReader("/proc/stat"))) {
|
||||||
String line = br.readLine(); // "cpu ..." 라인
|
|
||||||
br.close();
|
|
||||||
|
|
||||||
String[] p = line.split("\\s+");
|
String line = br.readLine();
|
||||||
|
String[] p = line.split("\\s+");
|
||||||
|
|
||||||
long user = Long.parseLong(p[1]);
|
long user = Long.parseLong(p[1]);
|
||||||
long nice = Long.parseLong(p[2]);
|
long nice = Long.parseLong(p[2]);
|
||||||
long system = Long.parseLong(p[3]);
|
long system = Long.parseLong(p[3]);
|
||||||
long idle = Long.parseLong(p[4]);
|
long idle = Long.parseLong(p[4]);
|
||||||
long iowait = Long.parseLong(p[5]);
|
long iowait = Long.parseLong(p[5]);
|
||||||
long irq = Long.parseLong(p[6]);
|
long irq = Long.parseLong(p[6]);
|
||||||
long softirq = Long.parseLong(p[7]);
|
long softirq = Long.parseLong(p[7]);
|
||||||
|
|
||||||
// 전체 시간 (누적)
|
long total = user + nice + system + idle + iowait + irq + softirq;
|
||||||
long total = user + nice + system + idle + iowait + irq + softirq;
|
long idleAll = idle + iowait;
|
||||||
|
|
||||||
// idle 시간
|
if (prevTotal == 0) {
|
||||||
long idleAll = idle + iowait;
|
prevTotal = total;
|
||||||
|
prevIdle = idleAll;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long totalDiff = total - prevTotal;
|
||||||
|
long idleDiff = idleAll - prevIdle;
|
||||||
|
|
||||||
// 최초 호출 (이전값 없음)
|
|
||||||
if (prevTotal == 0) {
|
|
||||||
prevTotal = total;
|
prevTotal = total;
|
||||||
prevIdle = idleAll;
|
prevIdle = idleAll;
|
||||||
|
|
||||||
|
if (totalDiff == 0) return 0;
|
||||||
|
|
||||||
|
return (1.0 - (double) idleDiff / totalDiff) * 100;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("CPU read fail", e);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 이전 대비 변화량
|
|
||||||
long totalDiff = total - prevTotal;
|
|
||||||
long idleDiff = idleAll - prevIdle;
|
|
||||||
|
|
||||||
log.info("CPU raw total={}, idle={}", total, idleAll);
|
|
||||||
|
|
||||||
// 상태 업데이트
|
|
||||||
prevTotal = total;
|
|
||||||
prevIdle = idleAll;
|
|
||||||
|
|
||||||
log.info("CPU prev total={}, prev idle={}", prevTotal, prevIdle);
|
|
||||||
log.info("CPU diff totalDiff={}, idleDiff={}", totalDiff, idleDiff);
|
|
||||||
|
|
||||||
// CPU 사용률 계산
|
|
||||||
return (1.0 - (double) idleDiff / totalDiff) * 100;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLinux() {
|
private boolean isLinux() {
|
||||||
@@ -200,13 +191,12 @@ public class SystemMonitorService {
|
|||||||
// =====================
|
// =====================
|
||||||
// GPU 평균 (30초)
|
// GPU 평균 (30초)
|
||||||
// =====================
|
// =====================
|
||||||
for (Map.Entry<Integer, Integer> entry : gpuMap.entrySet()) {
|
for (Map.Entry<Integer, Deque<Integer>> entry : gpuHistory.entrySet()) {
|
||||||
|
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
|
Deque<Integer> q = entry.getValue();
|
||||||
|
|
||||||
Deque<Integer> q = gpuHistory.get(index);
|
int avg = (int) q.stream().mapToInt(i -> i).average().orElse(0);
|
||||||
|
|
||||||
int avg = (int) (q == null ? 0 : q.stream().mapToInt(i -> i).average().orElse(0));
|
|
||||||
|
|
||||||
dto.gpus.add(new MonitorDto.Gpu(index, avg));
|
dto.gpus.add(new MonitorDto.Gpu(index, avg));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user