Movatterモバイル変換


[0]ホーム

URL:


runtime

packagestandard library
go1.25.4Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 5, 2025 License:BSD-3-ClauseImports:23Imported by:405,611

Details

Repository

cs.opensource.google/go/go

Links

Documentation

Overview

Package runtime contains operations that interact with Go's runtime system,such as functions to control goroutines. It also includes the low-level type informationused by the reflect package; seereflect's documentation for the programmableinterface to the run-time type system.

Environment Variables

The following environment variables ($name or %name%, depending on the hostoperating system) control the run-time behavior of Go programs. The meaningsand use may change from release to release.

The GOGC variable sets the initial garbage collection target percentage.A collection is triggered when the ratio of freshly allocated data to live dataremaining after the previous collection reaches this percentage. The defaultis GOGC=100. Setting GOGC=off disables the garbage collector entirely.runtime/debug.SetGCPercent allows changing this percentage at run time.

The GOMEMLIMIT variable sets a soft memory limit for the runtime. This memory limitincludes the Go heap and all other memory managed by the runtime, and excludesexternal memory sources such as mappings of the binary itself, memory managed inother languages, and memory held by the operating system on behalf of the Goprogram. GOMEMLIMIT is a numeric value in bytes with an optional unit suffix.The supported suffixes include B, KiB, MiB, GiB, and TiB. These suffixesrepresent quantities of bytes as defined by the IEC 80000-13 standard. That is,they are based on powers of two: KiB means 2^10 bytes, MiB means 2^20 bytes,and so on. The default setting ismath.MaxInt64, which effectively disables thememory limit.runtime/debug.SetMemoryLimit allows changing this limit at runtime.

The GODEBUG variable controls debugging variables within the runtime.It is a comma-separated list of name=val pairs setting these named variables:

clobberfree: setting clobberfree=1 causes the garbage collector toclobber the memory content of an object with bad content when it freesthe object.cpu.*: cpu.all=off disables the use of all optional instruction set extensions.cpu.extension=off disables use of instructions from the specified instruction set extension.extension is the lower case name for the instruction set extension such as sse41 or avxas listed in internal/cpu package. As an example cpu.avx=off disables runtime detectionand thereby use of AVX instructions.cgocheck: setting cgocheck=0 disables all checks for packagesusing cgo to incorrectly pass Go pointers to non-Go code.Setting cgocheck=1 (the default) enables relatively cheapchecks that may miss some errors. A more complete, but slow,cgocheck mode can be enabled using GOEXPERIMENT (whichrequires a rebuild), see https://pkg.go.dev/internal/goexperiment for details.checkfinalizers: setting checkfinalizers=1 causes the garbage collector to runmultiple partial non-parallel stop-the-world collections to identify common issues withfinalizers and cleanups, like those listed athttps://go.dev/doc/gc-guide#Finalizers_cleanups_and_weak_pointers. If a potential issueis found, the program will terminate with a description of all potential issues, theassociated values, and a list of those values' finalizers and cleanups, including wherethey were created. It also adds tracking for tiny blocks to help diagnose issues withthose as well. The analysis performed during the partial collection is conservative.Notably, it flags any path back to the original object from the cleanup function,cleanup arguments, or finalizer function as a potential issue, even if that path mightbe severed sometime later during execution (though this is not a recommended pattern).This mode also produces one line of output to stderr every GC cycle with informationabout the finalizer and cleanup queue lengths. Lines produced by this mode start with"checkfinalizers:".decoratemappings: controls whether the Go runtime annotates OSanonymous memory mappings with context about their purpose. Theseannotations appear in /proc/self/maps and /proc/self/smaps as"[anon: Go: ...]". This setting is only used on Linux. For Go 1.25, itdefaults to `decoratemappings=1`, enabling annotations. Using`decoratemappings=0` reverts to the pre-Go 1.25 behavior.disablethp: setting disablethp=1 on Linux disables transparent huge pages for the heap.It has no effect on other platforms. disablethp is meant for compatibility with versionsof Go before 1.21, which stopped working around a Linux kernel default that can resultin significant memory overuse. See https://go.dev/issue/64332. This setting will beremoved in a future release, so operators should tweak their Linux configuration to suittheir needs before then. See https://go.dev/doc/gc-guide#Linux_transparent_huge_pages.dontfreezetheworld: by default, the start of a fatal panic or throw"freezes the world", preempting all threads to stop all runninggoroutines, which makes it possible to traceback all goroutines, andkeeps their state close to the point of panic. Settingdontfreezetheworld=1 disables this preemption, allowing goroutines tocontinue executing during panic processing. Note that goroutines thatnaturally enter the scheduler will still stop. This can be useful whendebugging the runtime scheduler, as freezetheworld perturbs schedulerstate and thus may hide problems.efence: setting efence=1 causes the allocator to run in a modewhere each object is allocated on a unique page and addresses arenever recycled.gccheckmark: setting gccheckmark=1 enables verification of thegarbage collector's concurrent mark phase by performing asecond mark pass while the world is stopped.  If the secondpass finds a reachable object that was not found by concurrentmark, the garbage collector will panic.gcpacertrace: setting gcpacertrace=1 causes the garbage collector toprint information about the internal state of the concurrent pacer.gcshrinkstackoff: setting gcshrinkstackoff=1 disables moving goroutinesonto smaller stacks. In this mode, a goroutine's stack can only grow.gcstoptheworld: setting gcstoptheworld=1 disables concurrent garbage collection,making every garbage collection a stop-the-world event. Setting gcstoptheworld=2also disables concurrent sweeping after the garbage collection finishes.gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standarderror at each collection, summarizing the amount of memory collected and thelength of the pause. The format of this line is subject to change. Included inthe explanation below is also the relevant runtime/metrics metric for each field.Currently, it is:gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # MB stacks, #MB globals, # Pwhere the fields are as follows:gc #         the GC number, incremented at each GC@#s          time in seconds since program start#%           percentage of time spent in GC since program start#+...+#      wall-clock/CPU times for the phases of the GC#->#-># MB   heap size at GC start, at GC end, and live heap, or /gc/scan/heap:bytes# MB goal    goal heap size, or /gc/heap/goal:bytes# MB stacks  estimated scannable stack size, or /gc/scan/stack:bytes# MB globals scannable global size, or /gc/scan/globals:bytes# P          number of processors used, or /sched/gomaxprocs:threadsThe phases are stop-the-world (STW) sweep termination, concurrentmark and scan, and STW mark termination. The CPU timesfor mark/scan are broken down in to assist time (GC performed inline with allocation), background GC time, and idle GC time.If the line ends with "(forced)", this GC was forced by aruntime.GC() call.harddecommit: setting harddecommit=1 causes memory that is returned to the OS toalso have protections removed on it. This is the only mode of operation on Windows,but is helpful in debugging scavenger-related issues on other platforms. Currently,only supported on Linux.inittrace: setting inittrace=1 causes the runtime to emit a single line to standarderror for each package with init work, summarizing the execution time and memoryallocation. No information is printed for inits executed as part of plugin loadingand for packages without both user defined and compiler generated init work.The format of this line is subject to change. Currently, it is:init # @#ms, # ms clock, # bytes, # allocswhere the fields are as follows:init #      the package name@# ms       time in milliseconds when the init started since program start# clock     wall-clock time for package initialization work# bytes     memory allocated on the heap# allocs    number of heap allocationsmadvdontneed: setting madvdontneed=0 will use MADV_FREEinstead of MADV_DONTNEED on Linux when returning memory to thekernel. This is more efficient, but means RSS numbers willdrop only when the OS is under memory pressure. On the BSDs andIllumos/Solaris, setting madvdontneed=1 will use MADV_DONTNEED insteadof MADV_FREE. This is less efficient, but causes RSS numbers to dropmore quickly.memprofilerate: setting memprofilerate=X will update the value of runtime.MemProfileRate.When set to 0 memory profiling is disabled.  Refer to the description ofMemProfileRate for the default value.profstackdepth: profstackdepth=128 (the default) will set the maximum stackdepth used by all pprof profilers except for the CPU profiler to 128 frames.Stack traces that exceed this limit will be truncated to the limit startingfrom the leaf frame. Setting profstackdepth to any value above 1024 willsilently default to 1024. Future versions of Go may remove this limitationand extend profstackdepth to apply to the CPU profiler and execution tracer.pagetrace: setting pagetrace=/path/to/file will write out a trace of page eventsthat can be viewed, analyzed, and visualized using the x/debug/cmd/pagetrace tool.Build your program with GOEXPERIMENT=pagetrace to enable this functionality. Do notenable this functionality if your program is a setuid binary as it introduces a securityrisk in that scenario. Currently not supported on Windows, plan9 or js/wasm. Setting thisoption for some applications can produce large traces, so use with care.panicnil: setting panicnil=1 disables the runtime error when calling panic with nilinterface value or an untyped nil.invalidptr: invalidptr=1 (the default) causes the garbage collector and stackcopier to crash the program if an invalid pointer value (for example, 1)is found in a pointer-typed location. Setting invalidptr=0 disables this check.This should only be used as a temporary workaround to diagnose buggy code.The real fix is to not store integers in pointer-typed locations.sbrk: setting sbrk=1 replaces the memory allocator and garbage collectorwith a trivial allocator that obtains memory from the operating system andnever reclaims any memory.scavtrace: setting scavtrace=1 causes the runtime to emit a single line to standarderror, roughly once per GC cycle, summarizing the amount of work done by thescavenger as well as the total amount of memory returned to the operating systemand an estimate of physical memory utilization. The format of this line is subjectto change, but currently it is:scav # KiB work (bg), # KiB work (eager), # KiB total, #% utilwhere the fields are as follows:# KiB work (bg)    the amount of memory returned to the OS in the background since                   the last line# KiB work (eager) the amount of memory returned to the OS eagerly since the last line# KiB now          the amount of address space currently returned to the OS#% util            the fraction of all unscavenged heap memory which is in-useIf the line ends with "(forced)", then scavenging was forced by adebug.FreeOSMemory() call.scheddetail: setting schedtrace=X and scheddetail=1 causes the scheduler to emitdetailed multiline info every X milliseconds, describing state of the scheduler,processors, threads and goroutines.schedtrace: setting schedtrace=X causes the scheduler to emit a single line to standarderror every X milliseconds, summarizing the scheduler state.tracebackancestors: setting tracebackancestors=N extends tracebacks with the stacks atwhich goroutines were created, where N limits the number of ancestor goroutines toreport. This also extends the information returned by runtime.Stack.Setting N to 0 will report no ancestry information.tracefpunwindoff: setting tracefpunwindoff=1 forces the execution tracer touse the runtime's default stack unwinder instead of frame pointer unwinding.This increases tracer overhead, but could be helpful as a workaround or fordebugging unexpected regressions caused by frame pointer unwinding.traceadvanceperiod: the approximate period in nanoseconds between trace generations. Onlyapplies if a program is built with GOEXPERIMENT=exectracer2. Used primarily for testingand debugging the execution tracer.tracecheckstackownership: setting tracecheckstackownership=1 enables a debug check in theexecution tracer to double-check stack ownership before taking a stack trace.asyncpreemptoff: asyncpreemptoff=1 disables signal-basedasynchronous goroutine preemption. This makes some loopsnon-preemptible for long periods, which may delay GC andgoroutine scheduling. This is useful for debugging GC issuesbecause it also disables the conservative stack scanning usedfor asynchronously preempted goroutines.

Thenet andnet/http packages also refer to debugging variables in GODEBUG.See the documentation for those packages for details.

The GOMAXPROCS variable limits the number of operating system threads thatcan execute user-level Go code simultaneously. There is no limit to the number of threadsthat can be blocked in system calls on behalf of Go code; those do not count againstthe GOMAXPROCS limit. This package'sGOMAXPROCS function queries and changesthe limit.

The GORACE variable configures the race detector, for programs built using -race.See theRace Detector article for details.

The GOTRACEBACK variable controls the amount of output generated when a Goprogram fails due to an unrecovered panic or an unexpected runtime condition.By default, a failure prints a stack trace for the current goroutine,eliding functions internal to the run-time system, and then exits with exit code 2.The failure prints stack traces for all goroutines if there is no current goroutineor the failure is internal to the run-time.GOTRACEBACK=none omits the goroutine stack traces entirely.GOTRACEBACK=single (the default) behaves as described above.GOTRACEBACK=all adds stack traces for all user-created goroutines.GOTRACEBACK=system is like “all” but adds stack frames for run-time functionsand shows goroutines created internally by the run-time.GOTRACEBACK=crash is like “system” but crashes in an operating system-specificmanner instead of exiting. For example, on Unix systems, the crash raisesSIGABRT to trigger a core dump.GOTRACEBACK=wer is like “crash” but doesn't disable Windows Error Reporting (WER).For historical reasons, the GOTRACEBACK settings 0, 1, and 2 are synonyms fornone, all, and system, respectively.Theruntime/debug.SetTraceback function allows increasing theamount of output at run time, but it cannot reduce the amount below thatspecified by the environment variable.

The GOARCH, GOOS, GOPATH, and GOROOT environment variables completethe set of Go environment variables. They influence the building of Go programs(seecmd/go andgo/build).GOARCH, GOOS, and GOROOT are recorded at compile time and made available byconstants or functions in this package, but they do not influence the executionof the run-time system.

Security

On Unix platforms, Go's runtime system behaves slightly differently when abinary is setuid/setgid or executed with setuid/setgid-like properties, in orderto prevent dangerous behaviors. On Linux this is determined by checking for theAT_SECURE flag in the auxiliary vector, on the BSDs and Solaris/Illumos it isdetermined by checking the issetugid syscall, and on AIX it is determined bychecking if the uid/gid match the effective uid/gid.

When the runtime determines the binary is setuid/setgid-like, it does three mainthings:

  • The standard input/output file descriptors (0, 1, 2) are checked to be open.If any of them are closed, they are opened pointing at /dev/null.
  • The value of the GOTRACEBACK environment variable is set to 'none'.
  • When a signal is received that terminates the program, or the programencounters an unrecoverable panic that would otherwise override the valueof GOTRACEBACK, the goroutine stack, registers, and other memory relatedinformation are omitted.

Index

Examples

Constants

View Source
const Compiler = "gc"

Compiler is the name of the compiler toolchain that built therunning binary. Known toolchains are:

gc      Also known as cmd/compile.gccgo   The gccgo front end, part of the GCC compiler suite.

GOARCH is the running program's architecture target:one of 386, amd64, arm, s390x, and so on.

GOOS is the running program's operating system target:one of darwin, freebsd, linux, and so on.To view possible combinations of GOOS and GOARCH, run "go tool dist list".

Variables

View Source
var MemProfileRateint = 512 * 1024

MemProfileRate controls the fraction of memory allocationsthat are recorded and reported in the memory profile.The profiler aims to sample an average ofone allocation per MemProfileRate bytes allocated.

To include every allocated block in the profile, set MemProfileRate to 1.To turn off profiling entirely, set MemProfileRate to 0.

The tools that process the memory profiles assume that theprofile rate is constant across the lifetime of the programand equal to the current value. Programs that change thememory profiling rate should do so just once, as early aspossible in the execution of the program (for example,at the beginning of main).

Functions

funcBlockProfileadded ingo1.1

func BlockProfile(p []BlockProfileRecord) (nint, okbool)

BlockProfile returns n, the number of records in the current blocking profile.If len(p) >= n, BlockProfile copies the profile into p and returns n, true.If len(p) < n, BlockProfile does not change p and returns n, false.

Most clients should use theruntime/pprof package orthetesting package's -test.blockprofile flag insteadof calling BlockProfile directly.

funcBreakpoint

func Breakpoint()

Breakpoint executes a breakpoint trap.

funcCPUProfiledeprecated

func CPUProfile() []byte

CPUProfile panics.It formerly provided raw access to chunks ofa pprof-format profile generated by the runtime.The details of generating that format have changed,so this functionality has been removed.

Deprecated: Use theruntime/pprof package,or the handlers in thenet/http/pprof package,or thetesting package's -test.cpuprofile flag instead.

funcCaller

func Caller(skipint) (pcuintptr, filestring, lineint, okbool)

Caller reports file and line number information about function invocations onthe calling goroutine's stack. The argument skip is the number of stack framesto ascend, with 0 identifying the caller of Caller. (For historical reasons themeaning of skip differs between Caller andCallers.) The return values reportthe program counter, the file name (using forward slashes as path separator, evenon Windows), and the line number within the file of the corresponding call.The boolean ok is false if it was not possible to recover the information.

funcCallers

func Callers(skipint, pc []uintptr)int

Callers fills the slice pc with the return program counters of function invocationson the calling goroutine's stack. The argument skip is the number of stack framesto skip before recording in pc, with 0 identifying the frame for Callers itself and1 identifying the caller of Callers.It returns the number of entries written to pc.

To translate these PCs into symbolic information such as functionnames and line numbers, useCallersFrames. CallersFrames accountsfor inlined functions and adjusts the return program counters intocall program counters. Iterating over the returned slice of PCsdirectly is discouraged, as is usingFuncForPC on any of thereturned PCs, since these cannot account for inlining or returnprogram counter adjustment.

funcGC

func GC()

GC runs a garbage collection and blocks the caller until thegarbage collection is complete. It may also block the entireprogram.

funcGOMAXPROCS

func GOMAXPROCS(nint)int

GOMAXPROCS sets the maximum number of CPUs that can be executingsimultaneously and returns the previous setting. If n < 1, it does not changethe current setting.

Default

If the GOMAXPROCS environment variable is set to a positive whole number,GOMAXPROCS defaults to that value.

Otherwise, the Go runtime selects an appropriate default value from a combination of

  • the number of logical CPUs on the machine,
  • the process’s CPU affinity mask,
  • and, on Linux, the process’s average CPU throughput limit based on cgroup CPUquota, if any.

If GODEBUG=containermaxprocs=0 is set and GOMAXPROCS is not set by theenvironment variable, then GOMAXPROCS instead defaults to the value ofruntime.NumCPU. Note that GODEBUG=containermaxprocs=0 isdefault forlanguage version 1.24 and below.

Updates

The Go runtime periodically updates the default value based on changes tothe total logical CPU count, the CPU affinity mask, or cgroup quota. Settinga custom value with the GOMAXPROCS environment variable or by callingGOMAXPROCS disables automatic updates. The default value and automaticupdates can be restored by callingSetDefaultGOMAXPROCS.

If GODEBUG=updatemaxprocs=0 is set, the Go runtime does not performautomatic GOMAXPROCS updating. Note that GODEBUG=updatemaxprocs=0 isdefault for language version 1.24 and below.

Compatibility

Note that the default GOMAXPROCS behavior may change as the schedulerimproves, especially the implementation detail below.

Implementation details

When computing default GOMAXPROCS via cgroups, the Go runtime computes the"average CPU throughput limit" as the cgroup CPU quota / period. In cgroupv2, these values come from the cpu.max file. In cgroup v1, they come fromcpu.cfs_quota_us and cpu.cfs_period_us, respectively. In container runtimesthat allow configuring CPU limits, this value usually corresponds to the"CPU limit" option, not "CPU request".

The Go runtime typically selects the default GOMAXPROCS as the minimum ofthe logical CPU count, the CPU affinity mask count, or the cgroup CPUthroughput limit. However, it will never set GOMAXPROCS less than 2 unlessthe logical CPU count or CPU affinity mask count are below 2.

If the cgroup CPU throughput limit is not a whole number, the Go runtimerounds up to the next whole number.

GOMAXPROCS updates are performed up to once per second, or less if theapplication is idle.

funcGOROOTdeprecated

func GOROOT()string

GOROOT returns the root of the Go tree. It uses theGOROOT environment variable, if set at process start,or else the root used during the Go build.

Deprecated: The root used during the Go build will not bemeaningful if the binary is copied to another machine.Use the system path to locate the “go” binary, and use“go env GOROOT” to find its GOROOT.

funcGoexit

func Goexit()

Goexit terminates the goroutine that calls it. No other goroutine is affected.Goexit runs all deferred calls before terminating the goroutine. Because Goexitis not a panic, any recover calls in those deferred functions will return nil.

Calling Goexit from the main goroutine terminates that goroutinewithout func main returning. Since func main has not returned,the program continues execution of other goroutines.If all other goroutines exit, the program crashes.

It crashes if called from a thread not created by the Go runtime.

funcGoroutineProfile

func GoroutineProfile(p []StackRecord) (nint, okbool)

GoroutineProfile returns n, the number of records in the active goroutine stack profile.If len(p) >= n, GoroutineProfile copies the profile into p and returns n, true.If len(p) < n, GoroutineProfile does not change p and returns n, false.

Most clients should use theruntime/pprof package insteadof calling GoroutineProfile directly.

funcGosched

func Gosched()

Gosched yields the processor, allowing other goroutines to run. It does notsuspend the current goroutine, so execution resumes automatically.

funcKeepAliveadded ingo1.7

func KeepAlive(xany)

KeepAlive marks its argument as currently reachable.This ensures that the object is not freed, and its finalizer is not run,before the point in the program where KeepAlive is called.

A very simplified example showing where KeepAlive is required:

type File struct { d int }d, err := syscall.Open("/file/path", syscall.O_RDONLY, 0)// ... do something if err != nil ...p := &File{d}runtime.SetFinalizer(p, func(p *File) { syscall.Close(p.d) })var buf [10]byten, err := syscall.Read(p.d, buf[:])// Ensure p is not finalized until Read returns.runtime.KeepAlive(p)// No more uses of p after this point.

Without the KeepAlive call, the finalizer could run at the start ofsyscall.Read, closing the file descriptor before syscall.Read makesthe actual system call.

Note: KeepAlive should only be used to prevent finalizers fromrunning prematurely. In particular, when used withunsafe.Pointer,the rules for valid uses of unsafe.Pointer still apply.

funcLockOSThread

func LockOSThread()

LockOSThread wires the calling goroutine to its current operating system thread.The calling goroutine will always execute in that thread,and no other goroutine will execute in it,until the calling goroutine has made as many calls toUnlockOSThread as to LockOSThread.If the calling goroutine exits without unlocking the thread,the thread will be terminated.

All init functions are run on the startup thread. Calling LockOSThreadfrom an init function will cause the main function to be invoked onthat thread.

A goroutine should call LockOSThread before calling OS services ornon-Go library functions that depend on per-thread state.

funcMemProfile

func MemProfile(p []MemProfileRecord, inuseZerobool) (nint, okbool)

MemProfile returns a profile of memory allocated and freed per allocationsite.

MemProfile returns n, the number of records in the current memory profile.If len(p) >= n, MemProfile copies the profile into p and returns n, true.If len(p) < n, MemProfile does not change p and returns n, false.

If inuseZero is true, the profile includes allocation recordswhere r.AllocBytes > 0 but r.AllocBytes == r.FreeBytes.These are sites where memory was allocated, but it has allbeen released back to the runtime.

The returned profile may be up to two garbage collection cycles old.This is to avoid skewing the profile toward allocations; becauseallocations happen in real time but frees are delayed until the garbagecollector performs sweeping, the profile only accounts for allocationsthat have had a chance to be freed by the garbage collector.

Most clients should use the runtime/pprof package orthe testing package's -test.memprofile flag insteadof calling MemProfile directly.

funcMutexProfileadded ingo1.8

func MutexProfile(p []BlockProfileRecord) (nint, okbool)

MutexProfile returns n, the number of records in the current mutex profile.If len(p) >= n, MutexProfile copies the profile into p and returns n, true.Otherwise, MutexProfile does not change p, and returns n, false.

Most clients should use theruntime/pprof packageinstead of calling MutexProfile directly.

funcNumCPU

func NumCPU()int

NumCPU returns the number of logical CPUs usable by the current process.

The set of available CPUs is checked by querying the operating systemat process startup. Changes to operating system CPU allocation afterprocess startup are not reflected.

funcNumCgoCall

func NumCgoCall()int64

NumCgoCall returns the number of cgo calls made by the current process.

funcNumGoroutine

func NumGoroutine()int

NumGoroutine returns the number of goroutines that currently exist.

funcReadMemStats

func ReadMemStats(m *MemStats)

ReadMemStats populates m with memory allocator statistics.

The returned memory allocator statistics are up to date as of thecall to ReadMemStats. This is in contrast with a heap profile,which is a snapshot as of the most recently completed garbagecollection cycle.

funcReadTraceadded ingo1.5

func ReadTrace() []byte

ReadTrace returns the next chunk of binary tracing data, blocking until datais available. If tracing is turned off and all the data accumulated while itwas on has been returned, ReadTrace returns nil. The caller must copy thereturned data before calling ReadTrace again.ReadTrace must be called from one goroutine at a time.

funcSetBlockProfileRateadded ingo1.1

func SetBlockProfileRate(rateint)

SetBlockProfileRate controls the fraction of goroutine blocking eventsthat are reported in the blocking profile. The profiler aims to samplean average of one blocking event per rate nanoseconds spent blocked.

To include every blocking event in the profile, pass rate = 1.To turn off profiling entirely, pass rate <= 0.

funcSetCPUProfileRate

func SetCPUProfileRate(hzint)

SetCPUProfileRate sets the CPU profiling rate to hz samples per second.If hz <= 0, SetCPUProfileRate turns off profiling.If the profiler is on, the rate cannot be changed without first turning it off.

Most clients should use theruntime/pprof package orthetesting package's -test.cpuprofile flag instead of callingSetCPUProfileRate directly.

funcSetCgoTracebackadded ingo1.7

func SetCgoTraceback(versionint, traceback, context, symbolizerunsafe.Pointer)

SetCgoTraceback records three C functions to use to gathertraceback information from C code and to convert that tracebackinformation into symbolic information. These are used when printingstack traces for a program that uses cgo.

The traceback and context functions may be called from a signalhandler, and must therefore use only async-signal safe functions.The symbolizer function may be called while the program iscrashing, and so must be cautious about using memory. None of thefunctions may call back into Go.

The context function will be called with a single argument, apointer to a struct:

struct {Context uintptr}

In C syntax, this struct will be

struct {uintptr_t Context;};

If the Context field is 0, the context function is being called torecord the current traceback context. It should record in theContext field whatever information is needed about the currentpoint of execution to later produce a stack trace, probably thestack pointer and PC. In this case the context function will becalled from C code.

If the Context field is not 0, then it is a value returned by aprevious call to the context function. This case is called when thecontext is no longer needed; that is, when the Go code is returningto its C code caller. This permits the context function to releaseany associated resources.

While it would be correct for the context function to record acomplete a stack trace whenever it is called, and simply copy thatout in the traceback function, in a typical program the contextfunction will be called many times without ever recording atraceback for that context. Recording a complete stack trace in acall to the context function is likely to be inefficient.

The traceback function will be called with a single argument, apointer to a struct:

struct {Context    uintptrSigContext uintptrBuf        *uintptrMax        uintptr}

In C syntax, this struct will be

struct {uintptr_t  Context;uintptr_t  SigContext;uintptr_t* Buf;uintptr_t  Max;};

The Context field will be zero to gather a traceback from thecurrent program execution point. In this case, the tracebackfunction will be called from C code.

Otherwise Context will be a value previously returned by a call tothe context function. The traceback function should gather a stacktrace from that saved point in the program execution. The tracebackfunction may be called from an execution thread other than the onethat recorded the context, but only when the context is known to bevalid and unchanging. The traceback function may also be calleddeeper in the call stack on the same thread that recorded thecontext. The traceback function may be called multiple times withthe same Context value; it will usually be appropriate to cache theresult, if possible, the first time this is called for a specificcontext value.

If the traceback function is called from a signal handler on a Unixsystem, SigContext will be the signal context argument passed tothe signal handler (a C ucontext_t* cast to uintptr_t). This may beused to start tracing at the point where the signal occurred. Ifthe traceback function is not called from a signal handler,SigContext will be zero.

Buf is where the traceback information should be stored. It shouldbe PC values, such that Buf[0] is the PC of the caller, Buf[1] isthe PC of that function's caller, and so on. Max is the maximumnumber of entries to store. The function should store a zero toindicate the top of the stack, or that the caller is on a differentstack, presumably a Go stack.

Unlike runtime.Callers, the PC values returned should, when passedto the symbolizer function, return the file/line of the callinstruction. No additional subtraction is required or appropriate.

On all platforms, the traceback function is invoked when a call fromGo to C to Go requests a stack trace. On linux/amd64, linux/ppc64le,linux/arm64, and freebsd/amd64, the traceback function is also invokedwhen a signal is received by a thread that is executing a cgo call.The traceback function should not make assumptions about when it iscalled, as future versions of Go may make additional calls.

The symbolizer function will be called with a single argument, apointer to a struct:

struct {PC      uintptr // program counter to fetch information forFile    *byte   // file name (NUL terminated)Lineno  uintptr // line numberFunc    *byte   // function name (NUL terminated)Entry   uintptr // function entry pointMore    uintptr // set non-zero if more info for this PCData    uintptr // unused by runtime, available for function}

In C syntax, this struct will be

struct {uintptr_t PC;char*     File;uintptr_t Lineno;char*     Func;uintptr_t Entry;uintptr_t More;uintptr_t Data;};

The PC field will be a value returned by a call to the tracebackfunction.

The first time the function is called for a particular traceback,all the fields except PC will be 0. The function should fill in theother fields if possible, setting them to 0/nil if the informationis not available. The Data field may be used to store any usefulinformation across calls. The More field should be set to non-zeroif there is more information for this PC, zero otherwise. If Moreis set non-zero, the function will be called again with the samePC, and may return different information (this is intended for usewith inlined functions). If More is zero, the function will becalled with the next PC value in the traceback. When the tracebackis complete, the function will be called once more with PC set tozero; this may be used to free any information. Each call willleave the fields of the struct set to the same values they had uponreturn, except for the PC field when the More field is zero. Thefunction must not keep a copy of the struct pointer between calls.

When calling SetCgoTraceback, the version argument is the versionnumber of the structs that the functions expect to receive.Currently this must be zero.

The symbolizer function may be nil, in which case the results ofthe traceback function will be displayed as numbers. If thetraceback function is nil, the symbolizer function will never becalled. The context function may be nil, in which case thetraceback function will only be called with the context field setto zero. If the context function is nil, then calls from Go to Cto Go will not show a traceback for the C portion of the call stack.

SetCgoTraceback should be called only once, ideally from an init function.

funcSetDefaultGOMAXPROCSadded ingo1.25.0

func SetDefaultGOMAXPROCS()

SetDefaultGOMAXPROCS updates the GOMAXPROCS setting to the runtimedefault, as described byGOMAXPROCS, ignoring the GOMAXPROCSenvironment variable.

SetDefaultGOMAXPROCS can be used to enable the default automatic updatingGOMAXPROCS behavior if it has been disabled by the GOMAXPROCSenvironment variable or a prior call toGOMAXPROCS, or to force an immediateupdate if the caller is aware of a change to the total logical CPU count, CPUaffinity mask or cgroup quota.

funcSetFinalizer

func SetFinalizer(objany, finalizerany)

SetFinalizer sets the finalizer associated with obj to the providedfinalizer function. When the garbage collector finds an unreachable blockwith an associated finalizer, it clears the association and runsfinalizer(obj) in a separate goroutine. This makes obj reachable again,but now without an associated finalizer. Assuming that SetFinalizeris not called again, the next time the garbage collector seesthat obj is unreachable, it will free obj.

SetFinalizer(obj, nil) clears any finalizer associated with obj.

New Go code should consider usingAddCleanup instead, which is muchless error-prone than SetFinalizer.

The argument obj must be a pointer to an object allocated by callingnew, by taking the address of a composite literal, or by taking theaddress of a local variable.The argument finalizer must be a function that takes a single argumentto which obj's type can be assigned, and can have arbitrary ignored returnvalues. If either of these is not true, SetFinalizer may abort theprogram.

Finalizers are run in dependency order: if A points at B, both havefinalizers, and they are otherwise unreachable, only the finalizerfor A runs; once A is freed, the finalizer for B can run.If a cyclic structure includes a block with a finalizer, thatcycle is not guaranteed to be garbage collected and the finalizeris not guaranteed to run, because there is no ordering thatrespects the dependencies.

The finalizer is scheduled to run at some arbitrary time after theprogram can no longer reach the object to which obj points.There is no guarantee that finalizers will run before a program exits,so typically they are useful only for releasing non-memory resourcesassociated with an object during a long-running program.For example, anos.File object could use a finalizer to close theassociated operating system file descriptor when a program discardsan os.File without calling Close, but it would be a mistaketo depend on a finalizer to flush an in-memory I/O buffer such as abufio.Writer, because the buffer would not be flushed at program exit.

It is not guaranteed that a finalizer will run if the size of *obj iszero bytes, because it may share same address with other zero-sizeobjects in memory. Seehttps://go.dev/ref/spec#Size_and_alignment_guarantees.

It is not guaranteed that a finalizer will run for objects allocatedin initializers for package-level variables. Such objects may belinker-allocated, not heap-allocated.

Note that because finalizers may execute arbitrarily far into the futureafter an object is no longer referenced, the runtime is allowed to performa space-saving optimization that batches objects together in a singleallocation slot. The finalizer for an unreferenced object in such anallocation may never run if it always exists in the same batch as areferenced object. Typically, this batching only happens for tiny(on the order of 16 bytes or less) and pointer-free objects.

A finalizer may run as soon as an object becomes unreachable.In order to use finalizers correctly, the program must ensure thatthe object is reachable until it is no longer required.Objects stored in global variables, or that can be found by tracingpointers from a global variable, are reachable. A function argument orreceiver may become unreachable at the last point where the functionmentions it. To make an unreachable object reachable, pass the objectto a call of theKeepAlive function to mark the last point in thefunction where the object must be reachable.

For example, if p points to a struct, such as os.File, that containsa file descriptor d, and p has a finalizer that closes that filedescriptor, and if the last use of p in a function is a call tosyscall.Write(p.d, buf, size), then p may be unreachable as soon asthe program enterssyscall.Write. The finalizer may run at that moment,closing p.d, causing syscall.Write to fail because it is writing toa closed file descriptor (or, worse, to an entirely differentfile descriptor opened by a different goroutine). To avoid this problem,call KeepAlive(p) after the call to syscall.Write.

A single goroutine runs all finalizers for a program, sequentially.If a finalizer must run for a long time, it should do so by startinga new goroutine.

In the terminology of the Go memory model, a callSetFinalizer(x, f) “synchronizes before” the finalization call f(x).However, there is no guarantee that KeepAlive(x) or any other use of x“synchronizes before” f(x), so in general a finalizer should use a mutexor other synchronization mechanism if it needs to access mutable state in x.For example, consider a finalizer that inspects a mutable field in xthat is modified from time to time in the main program before xbecomes unreachable and the finalizer is invoked.The modifications in the main program and the inspection in the finalizerneed to use appropriate synchronization, such as mutexes or atomic updates,to avoid read-write races.

funcSetMutexProfileFractionadded ingo1.8

func SetMutexProfileFraction(rateint)int

SetMutexProfileFraction controls the fraction of mutex contention eventsthat are reported in the mutex profile. On average 1/rate events arereported. The previous rate is returned.

To turn off profiling entirely, pass rate 0.To just read the current rate, pass rate < 0.(For n>1 the details of sampling may change.)

funcStack

func Stack(buf []byte, allbool)int

Stack formats a stack trace of the calling goroutine into bufand returns the number of bytes written to buf.If all is true, Stack formats stack traces of all other goroutinesinto buf after the trace for the current goroutine.

funcStartTraceadded ingo1.5

func StartTrace()error

StartTrace enables tracing for the current process.While tracing, the data will be buffered and available viaReadTrace.StartTrace returns an error if tracing is already enabled.Most clients should use theruntime/trace package or thetesting package's-test.trace flag instead of calling StartTrace directly.

funcStopTraceadded ingo1.5

func StopTrace()

StopTrace stops tracing, if it was previously enabled.StopTrace only returns after all the reads for the trace have completed.

funcThreadCreateProfile

func ThreadCreateProfile(p []StackRecord) (nint, okbool)

ThreadCreateProfile returns n, the number of records in the thread creation profile.If len(p) >= n, ThreadCreateProfile copies the profile into p and returns n, true.If len(p) < n, ThreadCreateProfile does not change p and returns n, false.

Most clients should use the runtime/pprof package insteadof calling ThreadCreateProfile directly.

funcUnlockOSThread

func UnlockOSThread()

UnlockOSThread undoes an earlier call to LockOSThread.If this drops the number of active LockOSThread calls on thecalling goroutine to zero, it unwires the calling goroutine fromits fixed operating system thread.If there are no active LockOSThread calls, this is a no-op.

Before calling UnlockOSThread, the caller must ensure that the OSthread is suitable for running other goroutines. If the caller madeany permanent changes to the state of the thread that would affectother goroutines, it should not call this function and thus leavethe goroutine locked to the OS thread until the goroutine (andhence the thread) exits.

funcVersion

func Version()string

Version returns the Go tree's version string.It is either the commit hash and date at the time of the build or,when possible, a release tag like "go1.3".

Types

typeBlockProfileRecordadded ingo1.1

type BlockProfileRecord struct {Countint64Cyclesint64StackRecord}

BlockProfileRecord describes blocking events originatedat a particular call sequence (stack trace).

typeCleanupadded ingo1.24.0

type Cleanup struct {// contains filtered or unexported fields}

Cleanup is a handle to a cleanup call for a specific object.

funcAddCleanupadded ingo1.24.0

func AddCleanup[T, Sany](ptr *T, cleanup func(S), arg S)Cleanup

AddCleanup attaches a cleanup function to ptr. Some time after ptr is no longerreachable, the runtime will call cleanup(arg) in a separate goroutine.

A typical use is that ptr is an object wrapping an underlying resource (e.g.,a File object wrapping an OS file descriptor), arg is the underlying resource(e.g., the OS file descriptor), and the cleanup function releases the underlyingresource (e.g., by calling the close system call).

There are few constraints on ptr. In particular, multiple cleanups may beattached to the same pointer, or to different pointers within the sameallocation.

If ptr is reachable from cleanup or arg, ptr will never be collectedand the cleanup will never run. As a protection against simple cases of this,AddCleanup panics if arg is equal to ptr.

There is no specified order in which cleanups will run.In particular, if several objects point to each other and all becomeunreachable at the same time, their cleanups all become eligible to runand can run in any order. This is true even if the objects form a cycle.

Cleanups run concurrently with any user-created goroutines.Cleanups may also run concurrently with one another (unlike finalizers).If a cleanup function must run for a long time, it should create a new goroutineto avoid blocking the execution of other cleanups.

If ptr has both a cleanup and a finalizer, the cleanup will only run onceit has been finalized and becomes unreachable without an associated finalizer.

The cleanup(arg) call is not always guaranteed to run; in particular it is notguaranteed to run before program exit.

Cleanups are not guaranteed to run if the size of T is zero bytes, becauseit may share same address with other zero-size objects in memory. Seehttps://go.dev/ref/spec#Size_and_alignment_guarantees.

It is not guaranteed that a cleanup will run for objects allocatedin initializers for package-level variables. Such objects may belinker-allocated, not heap-allocated.

Note that because cleanups may execute arbitrarily far into the futureafter an object is no longer referenced, the runtime is allowed to performa space-saving optimization that batches objects together in a singleallocation slot. The cleanup for an unreferenced object in such anallocation may never run if it always exists in the same batch as areferenced object. Typically, this batching only happens for tiny(on the order of 16 bytes or less) and pointer-free objects.

A cleanup may run as soon as an object becomes unreachable.In order to use cleanups correctly, the program must ensure thatthe object is reachable until it is safe to run its cleanup.Objects stored in global variables, or that can be found by tracingpointers from a global variable, are reachable. A function argument orreceiver may become unreachable at the last point where the functionmentions it. To ensure a cleanup does not get called prematurely,pass the object to theKeepAlive function after the last pointwhere the object must remain reachable.

Example
package mainimport ("fmt""os""runtime")func main() {tempFile, err := os.CreateTemp(os.TempDir(), "file.*")if err != nil {fmt.Println("failed to create temp file:", err)return}ch := make(chan struct{})// Attach a cleanup function to the file object.runtime.AddCleanup(&tempFile, func(fileName string) {if err := os.Remove(fileName); err == nil {fmt.Println("temp file has been removed")}ch <- struct{}{}}, tempFile.Name())if err := tempFile.Close(); err != nil {fmt.Println("failed to close temp file:", err)return}// Run the garbage collector to reclaim unreachable objects// and enqueue their cleanup functions.runtime.GC()// Wait until cleanup function is done.<-ch}
Output:temp file has been removed

func (Cleanup)Stopadded ingo1.24.0

func (cCleanup) Stop()

Stop cancels the cleanup call. Stop will have no effect if the cleanup callhas already been queued for execution (because ptr became unreachable).To guarantee that Stop removes the cleanup function, the caller must ensurethat the pointer that was passed to AddCleanup is reachable across the call to Stop.

typeError

type Error interface {error// RuntimeError is a no-op function but// serves to distinguish types that are runtime// errors from ordinary errors: a type is a// runtime error if it has a RuntimeError method.RuntimeError()}

Error identifies a runtime error used in panic.

The Go runtime triggers panics for a variety of cases, as described by theGo Language Spec, such as out-of-bounds slice/array access, close of nilchannels, type assertion failures, etc.

When these cases occur, the Go runtime panics with an error that implementsError. This can be useful when recovering from panics to distinguish betweencustom application panics and fundamental runtime panics.

Packages outside of the Go standard library should not implement Error.

typeFrameadded ingo1.7

type Frame struct {// PC is the program counter for the location in this frame.// For a frame that calls another frame, this will be the// program counter of a call instruction. Because of inlining,// multiple frames may have the same PC value, but different// symbolic information.PCuintptr// Func is the Func value of this call frame. This may be nil// for non-Go code or fully inlined functions.Func *Func// Function is the package path-qualified function name of// this call frame. If non-empty, this string uniquely// identifies a single function in the program.// This may be the empty string if not known.// If Func is not nil then Function == Func.Name().Functionstring// File and Line are the file name and line number of the// location in this frame. For non-leaf frames, this will be// the location of a call. These may be the empty string and// zero, respectively, if not known. The file name uses// forward slashes, even on Windows.FilestringLineint// Entry point program counter for the function; may be zero// if not known. If Func is not nil then Entry ==// Func.Entry().Entryuintptr// contains filtered or unexported fields}

Frame is the information returned byFrames for each call frame.

typeFramesadded ingo1.7

type Frames struct {// contains filtered or unexported fields}

Frames may be used to get function/file/line information for aslice of PC values returned byCallers.

Example
package mainimport ("fmt""runtime""strings")func main() {c := func() {// Ask runtime.Callers for up to 10 PCs, including runtime.Callers itself.pc := make([]uintptr, 10)n := runtime.Callers(0, pc)if n == 0 {// No PCs available. This can happen if the first argument to// runtime.Callers is large.//// Return now to avoid processing the zero Frame that would// otherwise be returned by frames.Next below.return}pc = pc[:n] // pass only valid pcs to runtime.CallersFramesframes := runtime.CallersFrames(pc)// Loop to get frames.// A fixed number of PCs can expand to an indefinite number of Frames.for {frame, more := frames.Next()// Canonicalize function name and skip callers of this function// for predictable example output.// You probably don't need this in your own code.function := strings.ReplaceAll(frame.Function, "main.main", "runtime_test.ExampleFrames")fmt.Printf("- more:%v | %s\n", more, function)if function == "runtime_test.ExampleFrames" {break}// Check whether there are more frames to process after this one.if !more {break}}}b := func() { c() }a := func() { b() }a()}
Output:- more:true | runtime.Callers- more:true | runtime_test.ExampleFrames.func1- more:true | runtime_test.ExampleFrames.func2- more:true | runtime_test.ExampleFrames.func3- more:true | runtime_test.ExampleFrames

funcCallersFramesadded ingo1.7

func CallersFrames(callers []uintptr) *Frames

CallersFrames takes a slice of PC values returned byCallers andprepares to return function/file/line information.Do not change the slice until you are done with theFrames.

func (*Frames)Nextadded ingo1.7

func (ci *Frames) Next() (frameFrame, morebool)

Next returns aFrame representing the next call frame in the sliceof PC values. If it has already returned all call frames, Nextreturns a zeroFrame.

The more result indicates whether the next call to Next will returna validFrame. It does not necessarily indicate whether this callreturned one.

See theFrames example for idiomatic usage.

typeFunc

type Func struct {// contains filtered or unexported fields}

A Func represents a Go function in the running binary.

funcFuncForPC

func FuncForPC(pcuintptr) *Func

FuncForPC returns a *Func describing the function that contains thegiven program counter address, or else nil.

If pc represents multiple functions because of inlining, it returnsthe *Func describing the innermost function, but with an entry ofthe outermost function.

func (*Func)Entry

func (f *Func) Entry()uintptr

Entry returns the entry address of the function.

func (*Func)FileLine

func (f *Func) FileLine(pcuintptr) (filestring, lineint)

FileLine returns the file name and line number of thesource code corresponding to the program counter pc.The result will not be accurate if pc is not a programcounter within f.

func (*Func)Name

func (f *Func) Name()string

Name returns the name of the function.

typeMemProfileRecord

type MemProfileRecord struct {AllocBytes, FreeBytesint64// number of bytes allocated, freedAllocObjects, FreeObjectsint64// number of objects allocated, freedStack0                    [32]uintptr// stack trace for this record; ends at first 0 entry}

A MemProfileRecord describes the live objects allocatedby a particular call sequence (stack trace).

func (*MemProfileRecord)InUseBytes

func (r *MemProfileRecord) InUseBytes()int64

InUseBytes returns the number of bytes in use (AllocBytes - FreeBytes).

func (*MemProfileRecord)InUseObjects

func (r *MemProfileRecord) InUseObjects()int64

InUseObjects returns the number of objects in use (AllocObjects - FreeObjects).

func (*MemProfileRecord)Stack

func (r *MemProfileRecord) Stack() []uintptr

Stack returns the stack trace associated with the record,a prefix of r.Stack0.

typeMemStats

type MemStats struct {// Alloc is bytes of allocated heap objects.//// This is the same as HeapAlloc (see below).Allocuint64// TotalAlloc is cumulative bytes allocated for heap objects.//// TotalAlloc increases as heap objects are allocated, but// unlike Alloc and HeapAlloc, it does not decrease when// objects are freed.TotalAllocuint64// Sys is the total bytes of memory obtained from the OS.//// Sys is the sum of the XSys fields below. Sys measures the// virtual address space reserved by the Go runtime for the// heap, stacks, and other internal data structures. It's// likely that not all of the virtual address space is backed// by physical memory at any given moment, though in general// it all was at some point.Sysuint64// Lookups is the number of pointer lookups performed by the// runtime.//// This is primarily useful for debugging runtime internals.Lookupsuint64// Mallocs is the cumulative count of heap objects allocated.// The number of live objects is Mallocs - Frees.Mallocsuint64// Frees is the cumulative count of heap objects freed.Freesuint64// HeapAlloc is bytes of allocated heap objects.//// "Allocated" heap objects include all reachable objects, as// well as unreachable objects that the garbage collector has// not yet freed. Specifically, HeapAlloc increases as heap// objects are allocated and decreases as the heap is swept// and unreachable objects are freed. Sweeping occurs// incrementally between GC cycles, so these two processes// occur simultaneously, and as a result HeapAlloc tends to// change smoothly (in contrast with the sawtooth that is// typical of stop-the-world garbage collectors).HeapAllocuint64// HeapSys is bytes of heap memory obtained from the OS.//// HeapSys measures the amount of virtual address space// reserved for the heap. This includes virtual address space// that has been reserved but not yet used, which consumes no// physical memory, but tends to be small, as well as virtual// address space for which the physical memory has been// returned to the OS after it became unused (see HeapReleased// for a measure of the latter).//// HeapSys estimates the largest size the heap has had.HeapSysuint64// HeapIdle is bytes in idle (unused) spans.//// Idle spans have no objects in them. These spans could be// (and may already have been) returned to the OS, or they can// be reused for heap allocations, or they can be reused as// stack memory.//// HeapIdle minus HeapReleased estimates the amount of memory// that could be returned to the OS, but is being retained by// the runtime so it can grow the heap without requesting more// memory from the OS. If this difference is significantly// larger than the heap size, it indicates there was a recent// transient spike in live heap size.HeapIdleuint64// HeapInuse is bytes in in-use spans.//// In-use spans have at least one object in them. These spans// can only be used for other objects of roughly the same// size.//// HeapInuse minus HeapAlloc estimates the amount of memory// that has been dedicated to particular size classes, but is// not currently being used. This is an upper bound on// fragmentation, but in general this memory can be reused// efficiently.HeapInuseuint64// HeapReleased is bytes of physical memory returned to the OS.//// This counts heap memory from idle spans that was returned// to the OS and has not yet been reacquired for the heap.HeapReleaseduint64// HeapObjects is the number of allocated heap objects.//// Like HeapAlloc, this increases as objects are allocated and// decreases as the heap is swept and unreachable objects are// freed.HeapObjectsuint64// StackInuse is bytes in stack spans.//// In-use stack spans have at least one stack in them. These// spans can only be used for other stacks of the same size.//// There is no StackIdle because unused stack spans are// returned to the heap (and hence counted toward HeapIdle).StackInuseuint64// StackSys is bytes of stack memory obtained from the OS.//// StackSys is StackInuse, plus any memory obtained directly// from the OS for OS thread stacks.//// In non-cgo programs this metric is currently equal to StackInuse// (but this should not be relied upon, and the value may change in// the future).//// In cgo programs this metric includes OS thread stacks allocated// directly from the OS. Currently, this only accounts for one stack in// c-shared and c-archive build modes and other sources of stacks from// the OS (notably, any allocated by C code) are not currently measured.// Note this too may change in the future.StackSysuint64// MSpanInuse is bytes of allocated mspan structures.MSpanInuseuint64// MSpanSys is bytes of memory obtained from the OS for mspan// structures.MSpanSysuint64// MCacheInuse is bytes of allocated mcache structures.MCacheInuseuint64// MCacheSys is bytes of memory obtained from the OS for// mcache structures.MCacheSysuint64// BuckHashSys is bytes of memory in profiling bucket hash tables.BuckHashSysuint64// GCSys is bytes of memory in garbage collection metadata.GCSysuint64// OtherSys is bytes of memory in miscellaneous off-heap// runtime allocations.OtherSysuint64// NextGC is the target heap size of the next GC cycle.//// The garbage collector's goal is to keep HeapAlloc ≤ NextGC.// At the end of each GC cycle, the target for the next cycle// is computed based on the amount of reachable data and the// value of GOGC.NextGCuint64// LastGC is the time the last garbage collection finished, as// nanoseconds since 1970 (the UNIX epoch).LastGCuint64// PauseTotalNs is the cumulative nanoseconds in GC// stop-the-world pauses since the program started.//// During a stop-the-world pause, all goroutines are paused// and only the garbage collector can run.PauseTotalNsuint64// PauseNs is a circular buffer of recent GC stop-the-world// pause times in nanoseconds.//// The most recent pause is at PauseNs[(NumGC+255)%256]. In// general, PauseNs[N%256] records the time paused in the most// recent N%256th GC cycle. There may be multiple pauses per// GC cycle; this is the sum of all pauses during a cycle.PauseNs [256]uint64// PauseEnd is a circular buffer of recent GC pause end times,// as nanoseconds since 1970 (the UNIX epoch).//// This buffer is filled the same way as PauseNs. There may be// multiple pauses per GC cycle; this records the end of the// last pause in a cycle.PauseEnd [256]uint64// NumGC is the number of completed GC cycles.NumGCuint32// NumForcedGC is the number of GC cycles that were forced by// the application calling the GC function.NumForcedGCuint32// GCCPUFraction is the fraction of this program's available// CPU time used by the GC since the program started.//// GCCPUFraction is expressed as a number between 0 and 1,// where 0 means GC has consumed none of this program's CPU. A// program's available CPU time is defined as the integral of// GOMAXPROCS since the program started. That is, if// GOMAXPROCS is 2 and a program has been running for 10// seconds, its "available CPU" is 20 seconds. GCCPUFraction// does not include CPU time used for write barrier activity.//// This is the same as the fraction of CPU reported by// GODEBUG=gctrace=1.GCCPUFractionfloat64// EnableGC indicates that GC is enabled. It is always true,// even if GOGC=off.EnableGCbool// DebugGC is currently unused.DebugGCbool// BySize reports per-size class allocation statistics.//// BySize[N] gives statistics for allocations of size S where// BySize[N-1].Size < S ≤ BySize[N].Size.//// This does not report allocations larger than BySize[60].Size.BySize [61]struct {// Size is the maximum byte size of an object in this// size class.Sizeuint32// Mallocs is the cumulative count of heap objects// allocated in this size class. The cumulative bytes// of allocation is Size*Mallocs. The number of live// objects in this size class is Mallocs - Frees.Mallocsuint64// Frees is the cumulative count of heap objects freed// in this size class.Freesuint64}}

A MemStats records statistics about the memory allocator.

typePanicNilErroradded ingo1.21.0

type PanicNilError struct {// contains filtered or unexported fields}

A PanicNilError happens when code calls panic(nil).

Before Go 1.21, programs that called panic(nil) observed recover returning nil.Starting in Go 1.21, programs that call panic(nil) observe recover returning a *PanicNilError.Programs can change back to the old behavior by setting GODEBUG=panicnil=1.

func (*PanicNilError)Erroradded ingo1.21.0

func (*PanicNilError) Error()string

func (*PanicNilError)RuntimeErroradded ingo1.21.0

func (*PanicNilError) RuntimeError()

typePinneradded ingo1.21.0

type Pinner struct {// contains filtered or unexported fields}

A Pinner is a set of Go objects each pinned to a fixed location in memory. ThePinner.Pin method pins one object, whilePinner.Unpin unpins all pinnedobjects. See their comments for more information.

func (*Pinner)Pinadded ingo1.21.0

func (p *Pinner) Pin(pointerany)

Pin pins a Go object, preventing it from being moved or freed by the garbagecollector until thePinner.Unpin method has been called.

A pointer to a pinned object can be directly stored in C memory or can becontained in Go memory passed to C functions. If the pinned object itselfcontains pointers to Go objects, these objects must be pinned separately if theyare going to be accessed from C code.

The argument must be a pointer of any type or anunsafe.Pointer.It's safe to call Pin on non-Go pointers, in which case Pin will do nothing.

func (*Pinner)Unpinadded ingo1.21.0

func (p *Pinner) Unpin()

Unpin unpins all pinned objects of thePinner.

typeStackRecord

type StackRecord struct {Stack0 [32]uintptr// stack trace for this record; ends at first 0 entry}

A StackRecord describes a single execution stack.

func (*StackRecord)Stack

func (r *StackRecord) Stack() []uintptr

Stack returns the stack trace associated with the record,a prefix of r.Stack0.

typeTypeAssertionError

type TypeAssertionError struct {// contains filtered or unexported fields}

A TypeAssertionError explains a failed type assertion.

func (*TypeAssertionError)Error

func (e *TypeAssertionError) Error()string

func (*TypeAssertionError)RuntimeError

func (*TypeAssertionError) RuntimeError()

Source Files

View all Source files

Directories

PathSynopsis
Package cgo contains runtime support for code generated by the cgo tool.
Package cgo contains runtime support for code generated by the cgo tool.
Package coverage contains APIs for writing coverage profile data at runtime from long-running and/or server programs that do not terminate via os.Exit.
Package coverage contains APIs for writing coverage profile data at runtime from long-running and/or server programs that do not terminate via os.Exit.
Package debug contains facilities for programs to debug themselves while they are running.
Package debug contains facilities for programs to debug themselves while they are running.
Package metrics provides a stable interface to access implementation-defined metrics exported by the Go runtime.
Package metrics provides a stable interface to access implementation-defined metrics exported by the Go runtime.
Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.
Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.
Package race implements data race detection logic.
Package race implements data race detection logic.
Package trace contains facilities for programs to generate traces for the Go execution tracer.
Package trace contains facilities for programs to generate traces for the Go execution tracer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f orF : Jump to
y orY : Canonical URL
go.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic.Learn more.

[8]ページ先頭

©2009-2025 Movatter.jp