github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/runtime/metrics/doc.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Note: run 'go generate' (which will run 'go test -generate') to update the "Supported metrics" list.
     6  //go:generate go test -run=Docs -generate
     7  
     8  /*
     9  Package metrics provides a stable interface to access implementation-defined
    10  metrics exported by the Go runtime. This package is similar to existing functions
    11  like [runtime.ReadMemStats] and [debug.ReadGCStats], but significantly more general.
    12  
    13  The set of metrics defined by this package may evolve as the runtime itself
    14  evolves, and also enables variation across Go implementations, whose relevant
    15  metric sets may not intersect.
    16  
    17  # Interface
    18  
    19  Metrics are designated by a string key, rather than, for example, a field name in
    20  a struct. The full list of supported metrics is always available in the slice of
    21  Descriptions returned by All. Each Description also includes useful information
    22  about the metric.
    23  
    24  Thus, users of this API are encouraged to sample supported metrics defined by the
    25  slice returned by All to remain compatible across Go versions. Of course, situations
    26  arise where reading specific metrics is critical. For these cases, users are
    27  encouraged to use build tags, and although metrics may be deprecated and removed,
    28  users should consider this to be an exceptional and rare event, coinciding with a
    29  very large change in a particular Go implementation.
    30  
    31  Each metric key also has a "kind" that describes the format of the metric's value.
    32  In the interest of not breaking users of this package, the "kind" for a given metric
    33  is guaranteed not to change. If it must change, then a new metric will be introduced
    34  with a new key and a new "kind."
    35  
    36  # Metric key format
    37  
    38  As mentioned earlier, metric keys are strings. Their format is simple and well-defined,
    39  designed to be both human and machine readable. It is split into two components,
    40  separated by a colon: a rooted path and a unit. The choice to include the unit in
    41  the key is motivated by compatibility: if a metric's unit changes, its semantics likely
    42  did also, and a new key should be introduced.
    43  
    44  For more details on the precise definition of the metric key's path and unit formats, see
    45  the documentation of the Name field of the Description struct.
    46  
    47  # A note about floats
    48  
    49  This package supports metrics whose values have a floating-point representation. In
    50  order to improve ease-of-use, this package promises to never produce the following
    51  classes of floating-point values: NaN, infinity.
    52  
    53  # Supported metrics
    54  
    55  Below is the full list of supported metrics, ordered lexicographically.
    56  
    57  	/cgo/go-to-c-calls:calls
    58  		Count of calls made from Go to C by the current process.
    59  
    60  	/cpu/classes/gc/mark/assist:cpu-seconds
    61  		Estimated total CPU time goroutines spent performing GC
    62  		tasks to assist the GC and prevent it from falling behind the
    63  		application. This metric is an overestimate, and not directly
    64  		comparable to system CPU time measurements. Compare only with
    65  		other /cpu/classes metrics.
    66  
    67  	/cpu/classes/gc/mark/dedicated:cpu-seconds
    68  		Estimated total CPU time spent performing GC tasks on processors
    69  		(as defined by GOMAXPROCS) dedicated to those tasks. This
    70  		includes time spent with the world stopped due to the GC. This
    71  		metric is an overestimate, and not directly comparable to system
    72  		CPU time measurements. Compare only with other /cpu/classes
    73  		metrics.
    74  
    75  	/cpu/classes/gc/mark/idle:cpu-seconds
    76  		Estimated total CPU time spent performing GC tasks on spare CPU
    77  		resources that the Go scheduler could not otherwise find a use
    78  		for. This should be subtracted from the total GC CPU time to
    79  		obtain a measure of compulsory GC CPU time. This metric is an
    80  		overestimate, and not directly comparable to system CPU time
    81  		measurements. Compare only with other /cpu/classes metrics.
    82  
    83  	/cpu/classes/gc/pause:cpu-seconds
    84  		Estimated total CPU time spent with the application paused by
    85  		the GC. Even if only one thread is running during the pause,
    86  		this is computed as GOMAXPROCS times the pause latency because
    87  		nothing else can be executing. This is the exact sum of samples
    88  		in /gc/pause:seconds if each sample is multiplied by GOMAXPROCS
    89  		at the time it is taken. This metric is an overestimate,
    90  		and not directly comparable to system CPU time measurements.
    91  		Compare only with other /cpu/classes metrics.
    92  
    93  	/cpu/classes/gc/total:cpu-seconds
    94  		Estimated total CPU time spent performing GC tasks. This metric
    95  		is an overestimate, and not directly comparable to system CPU
    96  		time measurements. Compare only with other /cpu/classes metrics.
    97  		Sum of all metrics in /cpu/classes/gc.
    98  
    99  	/cpu/classes/idle:cpu-seconds
   100  		Estimated total available CPU time not spent executing
   101  		any Go or Go runtime code. In other words, the part of
   102  		/cpu/classes/total:cpu-seconds that was unused. This metric is
   103  		an overestimate, and not directly comparable to system CPU time
   104  		measurements. Compare only with other /cpu/classes metrics.
   105  
   106  	/cpu/classes/scavenge/assist:cpu-seconds
   107  		Estimated total CPU time spent returning unused memory to the
   108  		underlying platform in response eagerly in response to memory
   109  		pressure. This metric is an overestimate, and not directly
   110  		comparable to system CPU time measurements. Compare only with
   111  		other /cpu/classes metrics.
   112  
   113  	/cpu/classes/scavenge/background:cpu-seconds
   114  		Estimated total CPU time spent performing background tasks to
   115  		return unused memory to the underlying platform. This metric is
   116  		an overestimate, and not directly comparable to system CPU time
   117  		measurements. Compare only with other /cpu/classes metrics.
   118  
   119  	/cpu/classes/scavenge/total:cpu-seconds
   120  		Estimated total CPU time spent performing tasks that return
   121  		unused memory to the underlying platform. This metric is an
   122  		overestimate, and not directly comparable to system CPU time
   123  		measurements. Compare only with other /cpu/classes metrics.
   124  		Sum of all metrics in /cpu/classes/scavenge.
   125  
   126  	/cpu/classes/total:cpu-seconds
   127  		Estimated total available CPU time for user Go code or the Go
   128  		runtime, as defined by GOMAXPROCS. In other words, GOMAXPROCS
   129  		integrated over the wall-clock duration this process has been
   130  		executing for. This metric is an overestimate, and not directly
   131  		comparable to system CPU time measurements. Compare only with
   132  		other /cpu/classes metrics. Sum of all metrics in /cpu/classes.
   133  
   134  	/cpu/classes/user:cpu-seconds
   135  		Estimated total CPU time spent running user Go code. This may
   136  		also include some small amount of time spent in the Go runtime.
   137  		This metric is an overestimate, and not directly comparable
   138  		to system CPU time measurements. Compare only with other
   139  		/cpu/classes metrics.
   140  
   141  	/gc/cycles/automatic:gc-cycles
   142  		Count of completed GC cycles generated by the Go runtime.
   143  
   144  	/gc/cycles/forced:gc-cycles
   145  		Count of completed GC cycles forced by the application.
   146  
   147  	/gc/cycles/total:gc-cycles
   148  		Count of all completed GC cycles.
   149  
   150  	/gc/heap/allocs-by-size:bytes
   151  		Distribution of heap allocations by approximate size.
   152  		Bucket counts increase monotonically. Note that this does not
   153  		include tiny objects as defined by /gc/heap/tiny/allocs:objects,
   154  		only tiny blocks.
   155  
   156  	/gc/heap/allocs:bytes
   157  		Cumulative sum of memory allocated to the heap by the
   158  		application.
   159  
   160  	/gc/heap/allocs:objects
   161  		Cumulative count of heap allocations triggered by the
   162  		application. Note that this does not include tiny objects as
   163  		defined by /gc/heap/tiny/allocs:objects, only tiny blocks.
   164  
   165  	/gc/heap/frees-by-size:bytes
   166  		Distribution of freed heap allocations by approximate size.
   167  		Bucket counts increase monotonically. Note that this does not
   168  		include tiny objects as defined by /gc/heap/tiny/allocs:objects,
   169  		only tiny blocks.
   170  
   171  	/gc/heap/frees:bytes
   172  		Cumulative sum of heap memory freed by the garbage collector.
   173  
   174  	/gc/heap/frees:objects
   175  		Cumulative count of heap allocations whose storage was freed
   176  		by the garbage collector. Note that this does not include tiny
   177  		objects as defined by /gc/heap/tiny/allocs:objects, only tiny
   178  		blocks.
   179  
   180  	/gc/heap/goal:bytes
   181  		Heap size target for the end of the GC cycle.
   182  
   183  	/gc/heap/objects:objects
   184  		Number of objects, live or unswept, occupying heap memory.
   185  
   186  	/gc/heap/tiny/allocs:objects
   187  		Count of small allocations that are packed together into blocks.
   188  		These allocations are counted separately from other allocations
   189  		because each individual allocation is not tracked by the
   190  		runtime, only their block. Each block is already accounted for
   191  		in allocs-by-size and frees-by-size.
   192  
   193  	/gc/limiter/last-enabled:gc-cycle
   194  		GC cycle the last time the GC CPU limiter was enabled.
   195  		This metric is useful for diagnosing the root cause of an
   196  		out-of-memory error, because the limiter trades memory for CPU
   197  		time when the GC's CPU time gets too high. This is most likely
   198  		to occur with use of SetMemoryLimit. The first GC cycle is cycle
   199  		1, so a value of 0 indicates that it was never enabled.
   200  
   201  	/gc/pauses:seconds
   202  		Distribution of individual GC-related stop-the-world pause
   203  		latencies. Bucket counts increase monotonically.
   204  
   205  	/gc/stack/starting-size:bytes
   206  		The stack size of new goroutines.
   207  
   208  	/godebug/non-default-behavior/execerrdot:events
   209  		The number of non-default behaviors executed by the os/exec
   210  		package due to a non-default GODEBUG=execerrdot=... setting.
   211  
   212  	/godebug/non-default-behavior/http2client:events
   213  		The number of non-default behaviors executed by the net/http
   214  		package due to a non-default GODEBUG=http2client=... setting.
   215  
   216  	/godebug/non-default-behavior/http2server:events
   217  		The number of non-default behaviors executed by the net/http
   218  		package due to a non-default GODEBUG=http2server=... setting.
   219  
   220  	/godebug/non-default-behavior/installgoroot:events
   221  		The number of non-default behaviors executed by the go/build
   222  		package due to a non-default GODEBUG=installgoroot=... setting.
   223  
   224  	/godebug/non-default-behavior/jstmpllitinterp:events
   225  		The number of non-default behaviors executed by
   226  		the html/template package due to a non-default
   227  		GODEBUG=jstmpllitinterp=... setting.
   228  
   229  	/godebug/non-default-behavior/multipartmaxheaders:events
   230  		The number of non-default behaviors executed by
   231  		the mime/multipart package due to a non-default
   232  		GODEBUG=multipartmaxheaders=... setting.
   233  
   234  	/godebug/non-default-behavior/multipartmaxparts:events
   235  		The number of non-default behaviors executed by
   236  		the mime/multipart package due to a non-default
   237  		GODEBUG=multipartmaxparts=... setting.
   238  
   239  	/godebug/non-default-behavior/panicnil:events
   240  		The number of non-default behaviors executed by the runtime
   241  		package due to a non-default GODEBUG=panicnil=... setting.
   242  
   243  	/godebug/non-default-behavior/randautoseed:events
   244  		The number of non-default behaviors executed by the math/rand
   245  		package due to a non-default GODEBUG=randautoseed=... setting.
   246  
   247  	/godebug/non-default-behavior/tarinsecurepath:events
   248  		The number of non-default behaviors executed by the archive/tar
   249  		package due to a non-default GODEBUG=tarinsecurepath=...
   250  		setting.
   251  
   252  	/godebug/non-default-behavior/x509sha1:events
   253  		The number of non-default behaviors executed by the crypto/x509
   254  		package due to a non-default GODEBUG=x509sha1=... setting.
   255  
   256  	/godebug/non-default-behavior/x509usefallbackroots:events
   257  		The number of non-default behaviors executed by the crypto/x509
   258  		package due to a non-default GODEBUG=x509usefallbackroots=...
   259  		setting.
   260  
   261  	/godebug/non-default-behavior/zipinsecurepath:events
   262  		The number of non-default behaviors executed by the archive/zip
   263  		package due to a non-default GODEBUG=zipinsecurepath=...
   264  		setting.
   265  
   266  	/memory/classes/heap/free:bytes
   267  		Memory that is completely free and eligible to be returned to
   268  		the underlying system, but has not been. This metric is the
   269  		runtime's estimate of free address space that is backed by
   270  		physical memory.
   271  
   272  	/memory/classes/heap/objects:bytes
   273  		Memory occupied by live objects and dead objects that have not
   274  		yet been marked free by the garbage collector.
   275  
   276  	/memory/classes/heap/released:bytes
   277  		Memory that is completely free and has been returned to the
   278  		underlying system. This metric is the runtime's estimate of free
   279  		address space that is still mapped into the process, but is not
   280  		backed by physical memory.
   281  
   282  	/memory/classes/heap/stacks:bytes
   283  		Memory allocated from the heap that is reserved for stack space,
   284  		whether or not it is currently in-use.
   285  
   286  	/memory/classes/heap/unused:bytes
   287  		Memory that is reserved for heap objects but is not currently
   288  		used to hold heap objects.
   289  
   290  	/memory/classes/metadata/mcache/free:bytes
   291  		Memory that is reserved for runtime mcache structures, but not
   292  		in-use.
   293  
   294  	/memory/classes/metadata/mcache/inuse:bytes
   295  		Memory that is occupied by runtime mcache structures that are
   296  		currently being used.
   297  
   298  	/memory/classes/metadata/mspan/free:bytes
   299  		Memory that is reserved for runtime mspan structures, but not
   300  		in-use.
   301  
   302  	/memory/classes/metadata/mspan/inuse:bytes
   303  		Memory that is occupied by runtime mspan structures that are
   304  		currently being used.
   305  
   306  	/memory/classes/metadata/other:bytes
   307  		Memory that is reserved for or used to hold runtime metadata.
   308  
   309  	/memory/classes/os-stacks:bytes
   310  		Stack memory allocated by the underlying operating system.
   311  
   312  	/memory/classes/other:bytes
   313  		Memory used by execution trace buffers, structures for debugging
   314  		the runtime, finalizer and profiler specials, and more.
   315  
   316  	/memory/classes/profiling/buckets:bytes
   317  		Memory that is used by the stack trace hash map used for
   318  		profiling.
   319  
   320  	/memory/classes/total:bytes
   321  		All memory mapped by the Go runtime into the current process
   322  		as read-write. Note that this does not include memory mapped
   323  		by code called via cgo or via the syscall package. Sum of all
   324  		metrics in /memory/classes.
   325  
   326  	/sched/gomaxprocs:threads
   327  		The current runtime.GOMAXPROCS setting, or the number of
   328  		operating system threads that can execute user-level Go code
   329  		simultaneously.
   330  
   331  	/sched/goroutines:goroutines
   332  		Count of live goroutines.
   333  
   334  	/sched/latencies:seconds
   335  		Distribution of the time goroutines have spent in the scheduler
   336  		in a runnable state before actually running. Bucket counts
   337  		increase monotonically.
   338  
   339  	/sync/mutex/wait/total:seconds
   340  		Approximate cumulative time goroutines have spent blocked
   341  		on a sync.Mutex or sync.RWMutex. This metric is useful for
   342  		identifying global changes in lock contention. Collect a mutex
   343  		or block profile using the runtime/pprof package for more
   344  		detailed contention data.
   345  */
   346  package metrics