ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# package debug `import "runtime/debug"` Package debug contains facilities for programs to debug themselves while they are running. ## Index * [func FreeOSMemory()](#FreeOSMemory) * [func SetGCPercent(percent int) int](#SetGCPercent) * [func SetMaxStack(bytes int) int](#SetMaxStack) * [func SetMaxThreads(threads int) int](#SetMaxThreads) * [func SetPanicOnFault(enabled bool) bool](#SetPanicOnFault) * [type GCStats](#GCStats) * [func ReadGCStats(stats \*GCStats)](#ReadGCStats) * [func WriteHeapDump(fd uintptr)](#WriteHeapDump) * [func Stack() []byte](#Stack) * [func PrintStack()](#PrintStack) ## func [FreeOSMemory](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L103 "View Source") ``` func FreeOSMemory() ``` FreeOSMemory强制进行一次垃圾收集,以释放尽量多的内存回操作系统。(即使没有调用,运行时环境也会在后台任务里逐渐将内存释放给系统) ## func [SetGCPercent](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L93 "View Source") ``` func SetGCPercent(percent int) int ``` SetGCPercent设定垃圾收集的目标百分比:当新申请的内存大小占前次垃圾收集剩余可用内存大小的比率达到设定值时,就会触发垃圾收集。SetGCPercent返回之前的设定。初始值设定为环境变量GOGC的值;如果没有设置该环境变量,初始值为100。percent参数如果是负数值,会关闭垃圾收集。 ## func [SetMaxStack](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L117 "View Source") ``` func SetMaxStack(bytes int) int ``` SetMaxStack设置该以被单个go程调用栈可使用的内存最大值。如果任何go程在增加其调用栈时超出了该限制,程序就会崩溃。SetMaxStack返回之前的设置。默认设置在32位系统是250MB,在64位系统是1GB。 SetMaxStack主要用于限制无限递归的go程带来的灾难。 它只会限制未来增长的调用栈。 ## func [SetMaxThreads](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L135 "View Source") ``` func SetMaxThreads(threads int) int ``` SetMaxThreads设置go程序可以使用的最大操作系统线程数。如果程序试图使用超过该限制的线程数,就会导致程序崩溃。SetMaxThreads返回之前的设置,初始设置为10000个线程。 该限制控制操作系统线程数,而非go程数。go程序只有在一个go程准备要执行,但现有的线程都阻塞在系统调用、cgo调用或被runtime.LockOSThread函数阻塞在其他go程时,才会创建一个新的线程。 SetMaxThreads主要用于限制程序无限制的创造线程导致的灾难。目的是让程序在干掉操作系统之前,先干掉它自己。 ## func [SetPanicOnFault](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L148 "View Source") ``` func SetPanicOnFault(enabled bool) bool ``` SetPanicOnFault控制程序在不期望(非nil)的地址出错时的运行时行为。这些错误一般是因为运行时内存破坏的bug引起的,因此默认反应是使程序崩溃。使用内存映射的文件或进行内存的不安全操作的程序可能会在非nil的地址出现错误;SetPanicOnFault允许这些程序请求运行时只触发一个panic,而不是崩溃。SetPanicOnFault只用于当前的go程。它返回之前的设置。 ## type [GCStats](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L14 "View Source") ``` type GCStats struct { LastGC time.Time // 最近一次垃圾收集的时间 NumGC int64 // 垃圾收集的次数 PauseTotal time.Duration // 所有暂停收集垃圾消耗的总时间 Pause []time.Duration // 每次暂停收集垃圾的消耗的时间 PauseQuantiles []time.Duration } ``` GCStats收集了近期垃圾收集的信息。 ## func [ReadGCStats](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L38 "View Source") ``` func ReadGCStats(stats *GCStats) ``` ReadGCStats将垃圾收集信息填入stats里。stats.Pause字段的长度是依赖于系统的;stats.Pause切片如果长度足够会被重用,否则会重新申请。ReadGCStats可能会使用stats.Pause切片的全部容量。 如果stats.PauseQuantiles字段是非空的,ReadGCStats会在其中填写说明暂停时间分配的分位数。例如,如果len(stats.PauseQuantiles)为5,该字段会被填写上0%、25%、50%、75%、100%位置的分位数(就是说,不大于该位置暂停时间的暂停次数占总暂停次数的比例分别是0%、25%……) ## func [WriteHeapDump](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L153 "View Source") ``` func WriteHeapDump(fd uintptr) ``` WriteHeapDump将内存分配堆和其中对象的描述写入给定文件描述符fd指定的文件。 堆转储格式参见[http://golang.org/s/go13heapdump](http://golang.org/s/go13heapdump) ## func [Stack](https://github.com/golang/go/blob/master/src/runtime/debug/stack.go#L35 "View Source") ``` func Stack() []byte ``` Stack 返回格式化的go程的调用栈踪迹。 对于每一个调用栈,它包括原文件的行信息和PC值;对go函数还会尝试获取调用该函数的函数或方法,及调用所在行的文本。 此函数已废弃。请使用runtime包中的Stack函数代替。 ## func [PrintStack](https://github.com/golang/go/blob/master/src/runtime/debug/stack.go#L25 "View Source") ``` func PrintStack() ``` PrintStack将Stack返回信息打印到标准错误输出。