github.com/neatio-net/neatio@v1.7.3-0.20231114194659-f4d7a2226baa/utilities/metrics/debug.go (about)

     1  package metrics
     2  
     3  import (
     4  	"runtime/debug"
     5  	"time"
     6  )
     7  
     8  var (
     9  	debugMetrics struct {
    10  		GCStats struct {
    11  			LastGC Gauge
    12  			NumGC  Gauge
    13  			Pause  Histogram
    14  
    15  			PauseTotal Gauge
    16  		}
    17  		ReadGCStats Timer
    18  	}
    19  	gcStats debug.GCStats
    20  )
    21  
    22  func CaptureDebugGCStats(r Registry, d time.Duration) {
    23  	for range time.Tick(d) {
    24  		CaptureDebugGCStatsOnce(r)
    25  	}
    26  }
    27  
    28  func CaptureDebugGCStatsOnce(r Registry) {
    29  	lastGC := gcStats.LastGC
    30  	t := time.Now()
    31  	debug.ReadGCStats(&gcStats)
    32  	debugMetrics.ReadGCStats.UpdateSince(t)
    33  
    34  	debugMetrics.GCStats.LastGC.Update(gcStats.LastGC.UnixNano())
    35  	debugMetrics.GCStats.NumGC.Update(gcStats.NumGC)
    36  	if lastGC != gcStats.LastGC && 0 < len(gcStats.Pause) {
    37  		debugMetrics.GCStats.Pause.Update(int64(gcStats.Pause[0]))
    38  	}
    39  
    40  	debugMetrics.GCStats.PauseTotal.Update(int64(gcStats.PauseTotal))
    41  }
    42  
    43  func RegisterDebugGCStats(r Registry) {
    44  	debugMetrics.GCStats.LastGC = NewGauge()
    45  	debugMetrics.GCStats.NumGC = NewGauge()
    46  	debugMetrics.GCStats.Pause = NewHistogram(NewExpDecaySample(1028, 0.015))
    47  
    48  	debugMetrics.GCStats.PauseTotal = NewGauge()
    49  	debugMetrics.ReadGCStats = NewTimer()
    50  
    51  	r.Register("debug.GCStats.LastGC", debugMetrics.GCStats.LastGC)
    52  	r.Register("debug.GCStats.NumGC", debugMetrics.GCStats.NumGC)
    53  	r.Register("debug.GCStats.Pause", debugMetrics.GCStats.Pause)
    54  
    55  	r.Register("debug.GCStats.PauseTotal", debugMetrics.GCStats.PauseTotal)
    56  	r.Register("debug.ReadGCStats", debugMetrics.ReadGCStats)
    57  }
    58  
    59  func init() {
    60  	gcStats.Pause = make([]time.Duration, 11)
    61  }