mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime/metrics: add /gc/heap/live:bytes
For #56857 Change-Id: I0622af974783ab435e91b9fb3c1ba43f256ee4ac Reviewed-on: https://go-review.googlesource.com/c/go/+/497315 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Michael Knyszek <mknyszek@google.com> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Felix Geisendörfer <felix.geisendoerfer@datadoghq.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
8366497625
commit
ef2bb813c8
4 changed files with 26 additions and 0 deletions
|
|
@ -248,6 +248,13 @@ func initMetrics() {
|
|||
out.scalar = in.sysStats.heapGoal
|
||||
},
|
||||
},
|
||||
"/gc/heap/live:bytes": {
|
||||
deps: makeStatDepSet(heapStatsDep),
|
||||
compute: func(in *statAggregate, out *metricValue) {
|
||||
out.kind = metricKindUint64
|
||||
out.scalar = gcController.heapMarked
|
||||
},
|
||||
},
|
||||
"/gc/heap/objects:objects": {
|
||||
deps: makeStatDepSet(heapStatsDep),
|
||||
compute: func(in *statAggregate, out *metricValue) {
|
||||
|
|
|
|||
|
|
@ -245,6 +245,11 @@ var allDesc = []Description{
|
|||
Description: "Heap size target for the end of the GC cycle.",
|
||||
Kind: KindUint64,
|
||||
},
|
||||
{
|
||||
Name: "/gc/heap/live:bytes",
|
||||
Description: "Heap memory occupied by live objects that were marked by the previous GC.",
|
||||
Kind: KindUint64,
|
||||
},
|
||||
{
|
||||
Name: "/gc/heap/objects:objects",
|
||||
Description: "Number of objects, live or unswept, occupying heap memory.",
|
||||
|
|
|
|||
|
|
@ -180,6 +180,10 @@ Below is the full list of supported metrics, ordered lexicographically.
|
|||
/gc/heap/goal:bytes
|
||||
Heap size target for the end of the GC cycle.
|
||||
|
||||
/gc/heap/live:bytes
|
||||
Heap memory occupied by live objects that were marked by the
|
||||
previous GC.
|
||||
|
||||
/gc/heap/objects:objects
|
||||
Number of objects, live or unswept, occupying heap memory.
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ func prepareAllMetricsSamples() (map[string]metrics.Description, []metrics.Sampl
|
|||
}
|
||||
|
||||
func TestReadMetrics(t *testing.T) {
|
||||
// Run a GC cycle to get some of the stats to be non-zero.
|
||||
runtime.GC()
|
||||
|
||||
// Tests whether readMetrics produces values aligning
|
||||
// with ReadMemStats while the world is stopped.
|
||||
var mstats runtime.MemStats
|
||||
|
|
@ -128,6 +131,13 @@ func TestReadMetrics(t *testing.T) {
|
|||
mallocs = samples[i].Value.Uint64()
|
||||
case "/gc/heap/frees:objects":
|
||||
frees = samples[i].Value.Uint64()
|
||||
case "/gc/heap/live:bytes":
|
||||
if live := samples[i].Value.Uint64(); live > mstats.HeapAlloc {
|
||||
t.Errorf("live bytes: %d > heap alloc: %d", live, mstats.HeapAlloc)
|
||||
} else if live == 0 {
|
||||
// Might happen if we don't call runtime.GC() above.
|
||||
t.Error("live bytes is 0")
|
||||
}
|
||||
case "/gc/heap/objects:objects":
|
||||
checkUint64(t, name, samples[i].Value.Uint64(), mstats.HeapObjects)
|
||||
case "/gc/heap/goal:bytes":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue