mirror of
https://github.com/golang/go
synced 2024-11-18 22:34:45 -07:00
runtime/metrics: fix /gc/scan/* metrics
In the existing implementation, all /gc/scan/* metrics are always equal to 0 due to the dependency on gcStatDep not being set. This leads to gcStatAggregate always containing zeros, and always reporting 0 for those metrics. Also, add a test to ensure that /gc/scan/* metrics are not empty. Fixes #62477. Change-Id: I67497347d50ed5c3ce1719a18714c062ec938cab Reviewed-on: https://go-review.googlesource.com/c/go/+/525595 Reviewed-by: Michael Knyszek <mknyszek@google.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Felix Geisendörfer <felix.geisendoerfer@datadoghq.com>
This commit is contained in:
parent
4c5130a96e
commit
2186909d86
@ -190,24 +190,28 @@ func initMetrics() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/gc/scan/globals:bytes": {
|
"/gc/scan/globals:bytes": {
|
||||||
|
deps: makeStatDepSet(gcStatsDep),
|
||||||
compute: func(in *statAggregate, out *metricValue) {
|
compute: func(in *statAggregate, out *metricValue) {
|
||||||
out.kind = metricKindUint64
|
out.kind = metricKindUint64
|
||||||
out.scalar = in.gcStats.globalsScan
|
out.scalar = in.gcStats.globalsScan
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/gc/scan/heap:bytes": {
|
"/gc/scan/heap:bytes": {
|
||||||
|
deps: makeStatDepSet(gcStatsDep),
|
||||||
compute: func(in *statAggregate, out *metricValue) {
|
compute: func(in *statAggregate, out *metricValue) {
|
||||||
out.kind = metricKindUint64
|
out.kind = metricKindUint64
|
||||||
out.scalar = in.gcStats.heapScan
|
out.scalar = in.gcStats.heapScan
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/gc/scan/stack:bytes": {
|
"/gc/scan/stack:bytes": {
|
||||||
|
deps: makeStatDepSet(gcStatsDep),
|
||||||
compute: func(in *statAggregate, out *metricValue) {
|
compute: func(in *statAggregate, out *metricValue) {
|
||||||
out.kind = metricKindUint64
|
out.kind = metricKindUint64
|
||||||
out.scalar = in.gcStats.stackScan
|
out.scalar = in.gcStats.stackScan
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"/gc/scan/total:bytes": {
|
"/gc/scan/total:bytes": {
|
||||||
|
deps: makeStatDepSet(gcStatsDep),
|
||||||
compute: func(in *statAggregate, out *metricValue) {
|
compute: func(in *statAggregate, out *metricValue) {
|
||||||
out.kind = metricKindUint64
|
out.kind = metricKindUint64
|
||||||
out.scalar = in.gcStats.totalScan
|
out.scalar = in.gcStats.totalScan
|
||||||
@ -667,7 +671,7 @@ func (a *cpuStatsAggregate) compute() {
|
|||||||
// a.cpuStats.accumulate(nanotime(), gcphase == _GCmark)
|
// 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.
|
// acquired together to avoid skew and inconsistencies.
|
||||||
type gcStatsAggregate struct {
|
type gcStatsAggregate struct {
|
||||||
heapScan uint64
|
heapScan uint64
|
||||||
|
@ -405,6 +405,9 @@ func TestReadMetricsConsistency(t *testing.T) {
|
|||||||
if gc.pauses < gc.numGC*2 {
|
if gc.pauses < gc.numGC*2 {
|
||||||
t.Errorf("fewer pauses than expected: got %d, want at least %d", 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 {
|
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)
|
t.Errorf("/gc/scan/total:bytes doesn't line up with sum of /gc/scan*: total %d vs. sum %d", totalScan.got, totalScan.want)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user