| 12345678910111213141516171819202122232425262728293031 |
- //+build !windows,!solaris
- package main
- import (
- "syscall"
- "time"
- )
- func init() {
- go trackCPUUsage()
- }
- func trackCPUUsage() {
- var prevUsage int64
- var prevTime = time.Now().UnixNano()
- var rusage syscall.Rusage
- for {
- time.Sleep(10 * time.Second)
- syscall.Getrusage(syscall.RUSAGE_SELF, &rusage)
- curTime := time.Now().UnixNano()
- timeDiff := curTime - prevTime
- curUsage := rusage.Utime.Nano() + rusage.Stime.Nano()
- usageDiff := curUsage - prevUsage
- cpuUsageLock.Lock()
- cpuUsagePercent = 100 * float64(usageDiff) / float64(timeDiff)
- cpuUsageLock.Unlock()
- prevTime = curTime
- prevUsage = curUsage
- }
- }
|