Go에서 CPU 사용량 측정

2023. 6. 21. 10:03Programming/JAVA, C++, Go, Rust

    목차
반응형

host machine의 CPU usage를 측정

import "github.com/shirou/gopsutil/cpu"

period := 100 * time.Millisecond

cpuInfo, err := cpu.Percent(period, false)
if err != nil {
    return
}
c.usage = cpuInfo[0]

container의 CPU usage를 측정

dat, err := ioutil.ReadFile(path)
...
used, err := strconv.Atoi(strings.Replace(string(dat), "\n", "", 1))
...

time.Sleep(period)

// process가 사용한 system time을 획득
var r syscall.Rusage
syscall.Getrusage(syscall.RUSAGE_SELF, &r)

tend := time.Unix(r.Stime.Sec, int64(r.Utime.Usec*1000))


c.usage = float64(end - start) / float64(tend.Sub(tstart).Nanoseconds()) * 100

Sleep 한 시간동안 해당 (container의) process가 사용한 CPU usage를 process의 system time으로 나눔

반응형