Skip to content

Commit

Permalink
runtime/metrics: add /gc/gogc:percent
Browse files Browse the repository at this point in the history
For #56857

Change-Id: I7e7d2ea3e6ab59291a4cd867c680605ad75bd21f
Reviewed-on: https://go-review.googlesource.com/c/go/+/497317
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Felix Geisendörfer <felix.geisendoerfer@datadoghq.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
  • Loading branch information
felixge authored and gopherbot committed May 23, 2023
1 parent 2544b10 commit 1eae5c1
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/runtime/metrics.go
Expand Up @@ -254,6 +254,12 @@ func initMetrics() {
out.scalar = uint64(gcController.memoryLimit.Load())
},
},
"/gc/gogc:percent": {
compute: func(in *statAggregate, out *metricValue) {
out.kind = metricKindUint64
out.scalar = uint64(gcController.gcPercent.Load())
},
},
"/gc/heap/live:bytes": {
deps: makeStatDepSet(heapStatsDep),
compute: func(in *statAggregate, out *metricValue) {
Expand Down
7 changes: 7 additions & 0 deletions src/runtime/metrics/description.go
Expand Up @@ -193,6 +193,13 @@ var allDesc = []Description{
Kind: KindUint64,
Cumulative: true,
},
{
Name: "/gc/gogc:percent",
Description: "Heap size target percentage configured by the user, otherwise 100. This " +
"value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent " +
"function.",
Kind: KindUint64,
},
{
Name: "/gc/gomemlimit:bytes",
Description: "Go runtime memory limit configured by the user, otherwise " +
Expand Down
5 changes: 5 additions & 0 deletions src/runtime/metrics/doc.go
Expand Up @@ -147,6 +147,11 @@ Below is the full list of supported metrics, ordered lexicographically.
/gc/cycles/total:gc-cycles
Count of all completed GC cycles.
/gc/gogc:percent
Heap size target percentage configured by the user, otherwise
100. This value is set by the GOGC environment variable, and the
runtime/debug.SetGCPercent function.
/gc/gomemlimit:bytes
Go runtime memory limit configured by the user, otherwise
math.MaxInt64. This value is set by the GOMEMLIMIT environment
Expand Down
7 changes: 7 additions & 0 deletions src/runtime/metrics_test.go
Expand Up @@ -37,6 +37,11 @@ func TestReadMetrics(t *testing.T) {
oldLimit := debug.SetMemoryLimit(limit)
defer debug.SetMemoryLimit(oldLimit)

// Set an GC percent to check the metric for it
gcPercent := 99
oldGCPercent := debug.SetGCPercent(gcPercent)
defer debug.SetGCPercent(oldGCPercent)

// Tests whether readMetrics produces values aligning
// with ReadMemStats while the world is stopped.
var mstats runtime.MemStats
Expand Down Expand Up @@ -150,6 +155,8 @@ func TestReadMetrics(t *testing.T) {
checkUint64(t, name, samples[i].Value.Uint64(), mstats.HeapObjects)
case "/gc/heap/goal:bytes":
checkUint64(t, name, samples[i].Value.Uint64(), mstats.NextGC)
case "/gc/gogc:percent":
checkUint64(t, name, samples[i].Value.Uint64(), uint64(gcPercent))
case "/gc/cycles/automatic:gc-cycles":
checkUint64(t, name, samples[i].Value.Uint64(), uint64(mstats.NumGC-mstats.NumForcedGC))
case "/gc/cycles/forced:gc-cycles":
Expand Down

0 comments on commit 1eae5c1

Please sign in to comment.