From edbadcca09246c38adfce075d9ba7fcf4a7da049 Mon Sep 17 00:00:00 2001 From: ambition <918632536@qq.com> Date: Wed, 22 May 2024 10:19:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=8A=E6=8A=A5cpu?= =?UTF-8?q?=E5=92=8C=E5=86=85=E5=AD=98=E8=B5=84=E6=BA=90=E6=97=B6=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/util/process_collect/process_collector.go | 10 ++-------- .../util/process_collect/process_collector_other.go | 12 +++++++++++- .../process_collect/process_collector_windows.go | 12 ++++++++++-- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/internal/util/process_collect/process_collector.go b/internal/util/process_collect/process_collector.go index 2ccf2e242..6bb870191 100644 --- a/internal/util/process_collect/process_collector.go +++ b/internal/util/process_collect/process_collector.go @@ -70,14 +70,11 @@ func NewProcessCollector(ctx context.Context) { // setCpuUsage set current, max, and min CPU usage func setCpuUsage(usage float64) { - if usage == 0 { - return - } cpuUsage = usage if cpuUsage > cpuMaxUsage { cpuMaxUsage = cpuUsage } - if cpuUsage < cpuMinUsage || cpuMinUsage == 0 { + if cpuUsage > 0 && cpuUsage < cpuMinUsage { cpuMinUsage = cpuUsage } cpuTotalUsage += cpuUsage @@ -86,14 +83,11 @@ func setCpuUsage(usage float64) { // setMemUsage set current, max, and min memory usage func setMemUsage(usage uint64) { - if usage == 0 { - return - } memoryUsage = usage if memoryUsage > memoryMaxUsage { memoryMaxUsage = memoryUsage } - if memoryUsage < memoryMinUsage || memoryMinUsage == 0 { + if memoryUsage > 0 && memoryUsage < memoryMinUsage { memoryMinUsage = memoryUsage } memoryTotalUsage += memoryUsage diff --git a/internal/util/process_collect/process_collector_other.go b/internal/util/process_collect/process_collector_other.go index c19130ddb..eb4dab376 100644 --- a/internal/util/process_collect/process_collector_other.go +++ b/internal/util/process_collect/process_collector_other.go @@ -41,6 +41,9 @@ func (c *processCollector) processCollect() { return } + // 定义上一次上报的cpu时间 + var prevCPUTime, cpuUsage float64 + for { select { case <-time.After(time.Second): @@ -49,8 +52,15 @@ func (c *processCollector) processCollect() { logger.Error("returns the current status information of the process", logger.ErrAttr(err)) return } + // 计算 CPU 每秒的使用量 + diffTime := stat.CPUTime() - prevCPUTime + // 如果差值不等于0更新cpu使用量 + if diffTime != 0 { + cpuUsage = diffTime + } + prevCPUTime = stat.CPUTime() // set cpu usage - setCpuUsage(stat.CPUTime()) + setCpuUsage(cpuUsage) // set memory usage setMemUsage(uint64(stat.ResidentMemory())) case <-c.ctx.Done(): diff --git a/internal/util/process_collect/process_collector_windows.go b/internal/util/process_collect/process_collector_windows.go index 3c7526a49..4b06b5b11 100644 --- a/internal/util/process_collect/process_collector_windows.go +++ b/internal/util/process_collect/process_collector_windows.go @@ -84,6 +84,9 @@ func (c *processCollector) processCollect() { h := windows.CurrentProcess() var startTime, exitTime, kernelTime, userTime windows.Filetime + // 定义上一次上报的cpu时间 + var prevCPUTime, cpuUsage float64 + for { select { case <-time.After(time.Second): @@ -91,9 +94,14 @@ func (c *processCollector) processCollect() { logger.Error("get process times", logger.ErrAttr(err)) return } - + // 计算 CPU 每秒的使用量 + diffTime := fileTimeToSeconds(kernelTime) + fileTimeToSeconds(userTime) - prevCPUTime + if diffTime != 0 { + cpuUsage = diffTime + } + prevCPUTime = fileTimeToSeconds(kernelTime) + fileTimeToSeconds(userTime) // set cpu usage - setCpuUsage(fileTimeToSeconds(kernelTime) + fileTimeToSeconds(userTime)) + setCpuUsage(cpuUsage) mem, err := getProcessMemoryInfo(h) if err != nil {