From 8f4775a23d4f596bd75c9662b95e33a21b758e55 Mon Sep 17 00:00:00 2001 From: Isaac Saldana Date: Sun, 29 Nov 2015 15:23:53 -0800 Subject: [PATCH] Add support for fraction of CPU time used by GC --- runtime.go | 56 ++++++++++++++++++++----------------- runtime_gccpufraction.go | 9 ++++++ runtime_no_gccpufraction.go | 9 ++++++ 3 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 runtime_gccpufraction.go create mode 100644 runtime_no_gccpufraction.go diff --git a/runtime.go b/runtime.go index 82574bf..e8c8d15 100644 --- a/runtime.go +++ b/runtime.go @@ -9,32 +9,33 @@ var ( memStats runtime.MemStats runtimeMetrics struct { MemStats struct { - Alloc Gauge - BuckHashSys Gauge - DebugGC Gauge - EnableGC Gauge - Frees Gauge - HeapAlloc Gauge - HeapIdle Gauge - HeapInuse Gauge - HeapObjects Gauge - HeapReleased Gauge - HeapSys Gauge - LastGC Gauge - Lookups Gauge - Mallocs Gauge - MCacheInuse Gauge - MCacheSys Gauge - MSpanInuse Gauge - MSpanSys Gauge - NextGC Gauge - NumGC Gauge - PauseNs Histogram - PauseTotalNs Gauge - StackInuse Gauge - StackSys Gauge - Sys Gauge - TotalAlloc Gauge + Alloc Gauge + BuckHashSys Gauge + DebugGC Gauge + EnableGC Gauge + Frees Gauge + HeapAlloc Gauge + HeapIdle Gauge + HeapInuse Gauge + HeapObjects Gauge + HeapReleased Gauge + HeapSys Gauge + LastGC Gauge + Lookups Gauge + Mallocs Gauge + MCacheInuse Gauge + MCacheSys Gauge + MSpanInuse Gauge + MSpanSys Gauge + NextGC Gauge + NumGC Gauge + GCCPUFraction GaugeFloat64 + PauseNs Histogram + PauseTotalNs Gauge + StackInuse Gauge + StackSys Gauge + Sys Gauge + TotalAlloc Gauge } NumCgoCall Gauge NumGoroutine Gauge @@ -97,6 +98,7 @@ func CaptureRuntimeMemStatsOnce(r Registry) { runtimeMetrics.MemStats.MSpanSys.Update(int64(memStats.MSpanSys)) runtimeMetrics.MemStats.NextGC.Update(int64(memStats.NextGC)) runtimeMetrics.MemStats.NumGC.Update(int64(memStats.NumGC - numGC)) + runtimeMetrics.MemStats.GCCPUFraction.Update(gcCPUFraction(&memStats)) // i := numGC % uint32(len(memStats.PauseNs)) @@ -158,6 +160,7 @@ func RegisterRuntimeMemStats(r Registry) { runtimeMetrics.MemStats.MSpanSys = NewGauge() runtimeMetrics.MemStats.NextGC = NewGauge() runtimeMetrics.MemStats.NumGC = NewGauge() + runtimeMetrics.MemStats.GCCPUFraction = NewGaugeFloat64() runtimeMetrics.MemStats.PauseNs = NewHistogram(NewExpDecaySample(1028, 0.015)) runtimeMetrics.MemStats.PauseTotalNs = NewGauge() runtimeMetrics.MemStats.StackInuse = NewGauge() @@ -188,6 +191,7 @@ func RegisterRuntimeMemStats(r Registry) { r.Register("runtime.MemStats.MSpanSys", runtimeMetrics.MemStats.MSpanSys) r.Register("runtime.MemStats.NextGC", runtimeMetrics.MemStats.NextGC) r.Register("runtime.MemStats.NumGC", runtimeMetrics.MemStats.NumGC) + r.Register("runtime.MemStats.GCCPUFraction", runtimeMetrics.MemStats.GCCPUFraction) r.Register("runtime.MemStats.PauseNs", runtimeMetrics.MemStats.PauseNs) r.Register("runtime.MemStats.PauseTotalNs", runtimeMetrics.MemStats.PauseTotalNs) r.Register("runtime.MemStats.StackInuse", runtimeMetrics.MemStats.StackInuse) diff --git a/runtime_gccpufraction.go b/runtime_gccpufraction.go new file mode 100644 index 0000000..ca12c05 --- /dev/null +++ b/runtime_gccpufraction.go @@ -0,0 +1,9 @@ +// +build go1.5 + +package metrics + +import "runtime" + +func gcCPUFraction(memStats *runtime.MemStats) float64 { + return memStats.GCCPUFraction +} diff --git a/runtime_no_gccpufraction.go b/runtime_no_gccpufraction.go new file mode 100644 index 0000000..be96aa6 --- /dev/null +++ b/runtime_no_gccpufraction.go @@ -0,0 +1,9 @@ +// +build !go1.5 + +package metrics + +import "runtime" + +func gcCPUFraction(memStats *runtime.MemStats) float64 { + return 0 +}