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  }