diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index c59295861e..caec9e275a 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -20,6 +20,7 @@ import ( _ "net/http/pprof" // Comment this line to disable pprof endpoint. "os" "os/signal" + "runtime/debug" "syscall" "time" @@ -43,6 +44,13 @@ func main() { os.Exit(Main()) } +// defaultGCPercent is the value used to to call SetGCPercent if the GOGC +// environment variable is not set or empty. The value here is intended to hit +// the sweet spot between memory utilization and GC effort. It is lower than the +// usual default of 100 as a lot of the heap in Prometheus is used to cache +// memory chunks, which have a lifetime of hours if not days or weeks. +const defaultGCPercent = 40 + var ( configSuccess = prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: "prometheus", @@ -72,6 +80,10 @@ func Main() int { return 0 } + if os.Getenv("GOGC") == "" { + debug.SetGCPercent(defaultGCPercent) + } + log.Infoln("Starting prometheus", version.Info()) log.Infoln("Build context", version.BuildContext())