func FreeOSMemory()

    • FreeOSMemory强制进行一次垃圾收集,以释放尽量多的内存回操作系统。(即使没有调用,运行时环境也会在后台任务里逐渐将内存释放给系统)。gc清除后,什么时候释放内存归还 OS ? 编码说 5分钟, 但事实不是这样… ⼿手动触发 FreeOSMemory() 会更更好的释放内存,这适用于内存消耗较大的场景

    func SetGCPercent(percent int) int

    • 当新申请的内存大小占前次垃圾收集剩余可用内存大小的比率达到设定值时,就会触发垃圾收集
    • 初始值设定为环境变量GOGC的值;如果没有设置该环境变量,初始值为100。percent参数如果是负数值,会关闭垃圾收集。

    func SetMaxStack(bytes int) int

    • 单个go程调用栈可使用的内存最大值,32位系统是250MB,在64位系统是1GB
    • 如果任何go程在增加其调用栈时超出了该限制,程序就会崩溃

    func SetMaxThreads(threads int) int

    • 最大操作系统线程数,而非go程
    • 如果程序试图使用超过该限制的线程数,就会导致程序崩溃。
    • SetMaxThreads返回之前的设置,初始设置为10000个线程。
    • go程序只有在一个go程准备要执行,但现有的线程都阻塞在系统调用、cgo调用或被runtime.LockOSThread函数阻塞在其他go程时,才会创建一个新的线程

    func SetPanicOnFault(enabled bool) bool

    • 防止程序崩溃,替代的是引起一个panic
    • SetPanicOnFault只用于当前的go程

    type GCStats

    1. type GCStats struct {
    2. LastGC time.Time // 最近一次垃圾收集的时间
    3. NumGC int64 // 垃圾收集的次数
    4. PauseTotal time.Duration // 所有暂停收集垃圾消耗的总时间
    5. Pause []time.Duration // 每次暂停收集垃圾的消耗的时间
    6. PauseQuantiles []time.Duration
    7. }

    func ReadGCStats(stats *GCStats)

    • ReadGCStats将垃圾收集信息填入stats里

    func WriteHeapDump(fd uintptr)

    • WriteHeapDump将内存分配堆和其中对象的描述写入给定文件描述符fd指定的文件

    func PrintStack()

    • PrintStack将Stack返回信息打印到标准错误输出

    func Stack()

    • Stack返回调用它的goroutine的堆栈跟踪,包括自己本身