diff --git a/src/runtime/metrics.go b/src/runtime/metrics.go index 8ef1b022cf..3d0f174133 100644 --- a/src/runtime/metrics.go +++ b/src/runtime/metrics.go @@ -190,24 +190,28 @@ func initMetrics() { }, }, "/gc/scan/globals:bytes": { + deps: makeStatDepSet(gcStatsDep), compute: func(in *statAggregate, out *metricValue) { out.kind = metricKindUint64 out.scalar = in.gcStats.globalsScan }, }, "/gc/scan/heap:bytes": { + deps: makeStatDepSet(gcStatsDep), compute: func(in *statAggregate, out *metricValue) { out.kind = metricKindUint64 out.scalar = in.gcStats.heapScan }, }, "/gc/scan/stack:bytes": { + deps: makeStatDepSet(gcStatsDep), compute: func(in *statAggregate, out *metricValue) { out.kind = metricKindUint64 out.scalar = in.gcStats.stackScan }, }, "/gc/scan/total:bytes": { + deps: makeStatDepSet(gcStatsDep), compute: func(in *statAggregate, out *metricValue) { out.kind = metricKindUint64 out.scalar = in.gcStats.totalScan @@ -667,7 +671,7 @@ func (a *cpuStatsAggregate) compute() { // a.cpuStats.accumulate(nanotime(), gcphase == _GCmark) } -// cpuStatsAggregate represents various GC stats obtained from the runtime +// gcStatsAggregate represents various GC stats obtained from the runtime // acquired together to avoid skew and inconsistencies. type gcStatsAggregate struct { heapScan uint64 diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index a64e898739..cfb09a3929 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -405,6 +405,9 @@ func TestReadMetricsConsistency(t *testing.T) { if gc.pauses < gc.numGC*2 { t.Errorf("fewer pauses than expected: got %d, want at least %d", gc.pauses, gc.numGC*2) } + if totalScan.got <= 0 { + t.Errorf("scannable GC space is empty: %d", totalScan.got) + } if totalScan.got != totalScan.want { t.Errorf("/gc/scan/total:bytes doesn't line up with sum of /gc/scan*: total %d vs. sum %d", totalScan.got, totalScan.want) }