runtime,runtime/metrics: export goroutine count as a metric

For #37112.

Change-Id: I994dfe848605b95ef6aec24f53869e929247e987
Reviewed-on: https://go-review.googlesource.com/c/go/+/247049
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
This commit is contained in:
Michael Anthony Knyszek 2020-08-07 16:37:29 +00:00 committed by Michael Knyszek
parent d39a89fd58
commit 80c6b92ecb
4 changed files with 18 additions and 0 deletions

View file

@ -214,6 +214,12 @@ func initMetrics() {
in.sysStats.gcMiscSys + in.sysStats.otherSys
},
},
"/sched/goroutines:goroutines": {
compute: func(_ *statAggregate, out *metricValue) {
out.kind = metricKindUint64
out.scalar = uint64(gcount())
},
},
}
metricsInit = true
}

View file

@ -163,6 +163,11 @@ var allDesc = []Description{
Description: "All memory mapped by the Go runtime into the current process as read-write. Note that this does not include memory mapped by code called via cgo or via the syscall package. Sum of all metrics in /memory/classes.",
Kind: KindUint64,
},
{
Name: "/sched/goroutines:goroutines",
Description: "Count of live goroutines.",
Kind: KindUint64,
},
}
// All returns a slice of containing metric descriptions for all supported metrics.

View file

@ -123,5 +123,8 @@ Supported metrics
as read-write. Note that this does not include memory mapped
by code called via cgo or via the syscall package.
Sum of all metrics in /memory/classes.
/sched/goroutines:goroutines
Count of live goroutines.
*/
package metrics

View file

@ -145,6 +145,10 @@ func TestReadMetricsConsistency(t *testing.T) {
for i := range h.Counts {
gc.pauses += h.Counts[i]
}
case "/sched/goroutines:goroutines":
if samples[i].Value.Uint64() < 1 {
t.Error("number of goroutines is less than one")
}
}
}
if totalVirtual.got != totalVirtual.want {