github.com/whatap/golib@v0.0.22/util/panicutil/SelfInfo.go (about) 1 package panicutil 2 3 import ( 4 "os" 5 "time" 6 7 "github.com/shirou/gopsutil/process" 8 ) 9 10 var SelfCpuUsage float32 11 var SelfCpuThresholdEnabled = false 12 var SelfCpuThreshold = float32(50) 13 var SelfSleepInterval = int(10) 14 15 var SelfCpuPerfBufLen = uint64(50) 16 var SelfCpuPerfs []float32 = make([]float32, SelfCpuPerfBufLen) 17 var SelfCpuMeasureInterval = 100 18 var i uint64 = uint64(0) 19 20 //StartSelfMonitoring 21 func StartSelfMonitoring() { 22 23 for { 24 SelfCpuUsage, _ = GetSelfCPUUsage() 25 SelfCpuPerfs[i%SelfCpuPerfBufLen] = SelfCpuUsage 26 // fmt.Println("StartSelfMonitoring ", SelfCpuUsage, err) 27 i += 1 28 time.Sleep(time.Duration(SelfCpuMeasureInterval) * time.Millisecond) 29 } 30 } 31 32 //SelfSleep SelfSleep 33 func SelfSleep() { 34 if SelfCpuThresholdEnabled && SelfCpuUsage > SelfCpuThreshold { 35 time.Sleep(time.Duration(SelfSleepInterval) * time.Millisecond) 36 } 37 } 38 39 func GetSelfCpuPerf() (uint64, []float32) { 40 return i % SelfCpuPerfBufLen, SelfCpuPerfs 41 } 42 43 var thisProcess *process.Process 44 45 func GetSelfMemoryUsage() (int64, error) { 46 if thisProcess == nil { 47 p, err := process.NewProcess(int32(os.Getpid())) 48 if err != nil { 49 return 0, err 50 } 51 thisProcess = p 52 } 53 54 processMemory, err := thisProcess.MemoryInfo() 55 if err != nil { 56 return 0, err 57 } 58 used := processMemory.RSS 59 60 return int64(used), err 61 }