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