mirror of
https://github.com/golang/go
synced 2024-11-11 22:20:22 -07:00
runtime,runtime/metrics: add heap object count metric
For #37112. Change-Id: Idd3dd5c84215ddd1ab05c2e76e848aa0a4d40fb0 Reviewed-on: https://go-review.googlesource.com/c/go/+/247043 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:
parent
74e566ed1d
commit
07c3f65d53
@ -38,6 +38,13 @@ func initMetrics() {
|
||||
return
|
||||
}
|
||||
metrics = map[string]metricData{
|
||||
"/gc/heap/objects:objects": {
|
||||
deps: makeStatDepSet(heapStatsDep),
|
||||
compute: func(in *statAggregate, out *metricValue) {
|
||||
out.kind = metricKindUint64
|
||||
out.scalar = in.heapStats.numObjects
|
||||
},
|
||||
},
|
||||
"/memory/classes/heap/free:bytes": {
|
||||
deps: makeStatDepSet(heapStatsDep),
|
||||
compute: func(in *statAggregate, out *metricValue) {
|
||||
@ -210,9 +217,13 @@ func (s *statDepSet) has(d statDep) bool {
|
||||
type heapStatsAggregate struct {
|
||||
heapStatsDelta
|
||||
|
||||
// Derived from values in heapStatsDelta.
|
||||
|
||||
// inObjects is the bytes of memory occupied by objects,
|
||||
// derived from other values in heapStats.
|
||||
inObjects uint64
|
||||
|
||||
// numObjects is the number of live objects in the heap.
|
||||
numObjects uint64
|
||||
}
|
||||
|
||||
// compute populates the heapStatsAggregate with values from the runtime.
|
||||
@ -221,8 +232,11 @@ func (a *heapStatsAggregate) compute() {
|
||||
|
||||
// Calculate derived stats.
|
||||
a.inObjects = uint64(a.largeAlloc - a.largeFree)
|
||||
a.numObjects = uint64(a.largeAllocCount - a.largeFreeCount)
|
||||
for i := range a.smallAllocCount {
|
||||
a.inObjects += uint64(a.smallAllocCount[i]-a.smallFreeCount[i]) * uint64(class_to_size[i])
|
||||
n := uint64(a.smallAllocCount[i] - a.smallFreeCount[i])
|
||||
a.inObjects += n * uint64(class_to_size[i])
|
||||
a.numObjects += n
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,11 @@ type Description struct {
|
||||
// The English language descriptions below must be kept in sync with the
|
||||
// descriptions of each metric in doc.go.
|
||||
var allDesc = []Description{
|
||||
{
|
||||
Name: "/gc/heap/objects:objects",
|
||||
Description: "Number of objects, live or unswept, occupying heap memory.",
|
||||
Kind: KindUint64,
|
||||
},
|
||||
{
|
||||
Name: "/memory/classes/heap/free:bytes",
|
||||
Description: "Memory that is available for allocation, and may be returned to the underlying system.",
|
||||
|
@ -44,6 +44,9 @@ the documentation of the Name field of the Description struct.
|
||||
|
||||
Supported metrics
|
||||
|
||||
/gc/heap/objects:objects
|
||||
Number of objects, live or unswept, occupying heap memory.
|
||||
|
||||
/memory/classes/heap/free:bytes
|
||||
Memory that is available for allocation, and may be returned
|
||||
to the underlying system.
|
||||
|
@ -70,6 +70,8 @@ func TestReadMetrics(t *testing.T) {
|
||||
checkUint64(t, name, samples[i].Value.Uint64(), mstats.BuckHashSys)
|
||||
case "/memory/classes/total:bytes":
|
||||
checkUint64(t, name, samples[i].Value.Uint64(), mstats.Sys)
|
||||
case "/gc/heap/objects:objects":
|
||||
checkUint64(t, name, samples[i].Value.Uint64(), mstats.HeapObjects)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user