mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime,runtime/metrics: add memory metrics
This change adds support for a variety of runtime memory metrics and contains the base implementation of Read for the runtime/metrics package, which lives in the runtime. It also adds testing infrastructure for the metrics package, and a bunch of format and documentation tests. For #37112. Change-Id: I16a2c4781eeeb2de0abcb045c15105f1210e2d8a Reviewed-on: https://go-review.googlesource.com/c/go/+/247041 Run-TryBot: Michael Knyszek <mknyszek@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> Trust: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
79781e8dd3
commit
b08dfbaa43
9 changed files with 781 additions and 6 deletions
|
|
@ -298,6 +298,32 @@ func (p *ProfBuf) Close() {
|
|||
(*profBuf)(p).close()
|
||||
}
|
||||
|
||||
func ReadMetricsSlow(memStats *MemStats, samplesp unsafe.Pointer, len, cap int) {
|
||||
stopTheWorld("ReadMetricsSlow")
|
||||
|
||||
// Initialize the metrics beforehand because this could
|
||||
// allocate and skew the stats.
|
||||
semacquire(&metricsSema)
|
||||
initMetrics()
|
||||
semrelease(&metricsSema)
|
||||
|
||||
systemstack(func() {
|
||||
// Read memstats first. It's going to flush
|
||||
// the mcaches which readMetrics does not do, so
|
||||
// going the other way around may result in
|
||||
// inconsistent statistics.
|
||||
readmemstats_m(memStats)
|
||||
})
|
||||
|
||||
// Read metrics off the system stack.
|
||||
//
|
||||
// The only part of readMetrics that could allocate
|
||||
// and skew the stats is initMetrics.
|
||||
readMetrics(samplesp, len, cap)
|
||||
|
||||
startTheWorld()
|
||||
}
|
||||
|
||||
// ReadMemStatsSlow returns both the runtime-computed MemStats and
|
||||
// MemStats accumulated by scanning the heap.
|
||||
func ReadMemStatsSlow() (base, slow MemStats) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue