github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/metrics/debug.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 package metrics 10 11 import ( 12 "runtime/debug" 13 "time" 14 ) 15 16 var ( 17 debugMetrics struct { 18 GCStats struct { 19 LastGC Gauge 20 NumGC Gauge 21 Pause Histogram 22 //暂停序列柱状图 23 PauseTotal Gauge 24 } 25 ReadGCStats Timer 26 } 27 gcStats debug.GCStats 28 ) 29 30 //捕获在中导出的Go垃圾收集器统计信息的新值 31 //调试.gcstats。这被称为Goroutine。 32 func CaptureDebugGCStats(r Registry, d time.Duration) { 33 for range time.Tick(d) { 34 CaptureDebugGCStatsOnce(r) 35 } 36 } 37 38 //捕获在中导出的Go垃圾收集器统计信息的新值 39 //调试.gcstats。这被设计为在后台goroutine中调用。 40 //提供尚未提供给RegisterDebuggCStats的注册表将 41 //恐慌。 42 // 43 //注意(但更不用说),因为debug.readgcstats调用 44 //C函数runtime·lock(runtime·mheap),它虽然不能阻止世界 45 //手术,不是你一直想做的事情。 46 func CaptureDebugGCStatsOnce(r Registry) { 47 lastGC := gcStats.LastGC 48 t := time.Now() 49 debug.ReadGCStats(&gcStats) 50 debugMetrics.ReadGCStats.UpdateSince(t) 51 52 debugMetrics.GCStats.LastGC.Update(gcStats.LastGC.UnixNano()) 53 debugMetrics.GCStats.NumGC.Update(gcStats.NumGC) 54 if lastGC != gcStats.LastGC && 0 < len(gcStats.Pause) { 55 debugMetrics.GCStats.Pause.Update(int64(gcStats.Pause[0])) 56 } 57 //debugmetrics.gcstats.pauseQuantiles.update(gcstats.pauseQuantiles) 58 debugMetrics.GCStats.PauseTotal.Update(int64(gcStats.PauseTotal)) 59 } 60 61 //注册中导出的Go垃圾收集器统计信息的度量 62 //调试.gcstats。这些指标是通过其完全限定的GO符号命名的, 63 //即debug.gcstats.pausetotal。 64 func RegisterDebugGCStats(r Registry) { 65 debugMetrics.GCStats.LastGC = NewGauge() 66 debugMetrics.GCStats.NumGC = NewGauge() 67 debugMetrics.GCStats.Pause = NewHistogram(NewExpDecaySample(1028, 0.015)) 68 //debugmetrics.gcstats.pausequeantiles=newhistogram(newexpdecaysample(1028,0.015))。 69 debugMetrics.GCStats.PauseTotal = NewGauge() 70 debugMetrics.ReadGCStats = NewTimer() 71 72 r.Register("debug.GCStats.LastGC", debugMetrics.GCStats.LastGC) 73 r.Register("debug.GCStats.NumGC", debugMetrics.GCStats.NumGC) 74 r.Register("debug.GCStats.Pause", debugMetrics.GCStats.Pause) 75 //r.register(“debug.gcstats.pausequeantiles”,debugmetrics.gcstats.pausequeantiles) 76 r.Register("debug.GCStats.PauseTotal", debugMetrics.GCStats.PauseTotal) 77 r.Register("debug.ReadGCStats", debugMetrics.ReadGCStats) 78 } 79 80 //为gcstats分配初始切片。暂停以避免在 81 //正常运行。 82 func init() { 83 gcStats.Pause = make([]time.Duration, 11) 84 }