?
This document uses PHP Chinese website manual Release
import "runtime/debug"
概況
索引
程序包調(diào)試了包含程序在運(yùn)行時(shí)進(jìn)行調(diào)試的功能。
func FreeOSMemory()
func PrintStack()
func ReadGCStats(stats *GCStats)
func SetGCPercent(percent int) int
func SetMaxStack(bytes int) int
func SetMaxThreads(threads int) int
func SetPanicOnFault(enabled bool) bool
func SetTraceback(level string)
func Stack() []byte
func WriteHeapDump(fd uintptr)
type GCStats
garbage.go stack.go stubs.go
func FreeOSMemory()
FreeOSMemory 強(qiáng)制進(jìn)行垃圾收集,然后嘗試盡可能多地將內(nèi)存返回給操作系統(tǒng)。(即使未調(diào)用此函數(shù),運(yùn)行時(shí)也會(huì)逐漸將內(nèi)存返回到后臺(tái)任務(wù)中的操作系統(tǒng)。)
func PrintStack()
PrintStack 將由 runtime.Stack 返回的堆棧跟蹤打印到標(biāo)準(zhǔn)錯(cuò)誤。
func ReadGCStats(stats *GCStats)
ReadGCStats 將有關(guān)垃圾收集的統(tǒng)計(jì)信息讀入統(tǒng)計(jì)信息。暫停歷史記錄中的條目數(shù)與系統(tǒng)有關(guān); stats.Pause 片斷將在足夠大時(shí)重用,否則重新分配。ReadGCStats 可能會(huì)使用 stats.Pause 片斷的全部容量。如果 stats.PauseQuantiles 不是空的,ReadGCStats 會(huì)用分位數(shù)來(lái)填充總結(jié)暫停時(shí)間的分布。例如,如果 len(stats.PauseQuantiles)為5,則將填充最小值,25%,50%,75%和最大暫停時(shí)間。
func SetGCPercent(percent int) int
SetGCPercent 設(shè)置垃圾收集目標(biāo)百分比:當(dāng)新分配的數(shù)據(jù)與上一次收集后剩余的實(shí)時(shí)數(shù)據(jù)的比率達(dá)到此百分比時(shí),觸發(fā)收集。SetGCPercent 返回先前的設(shè)置。初始設(shè)置是啟動(dòng)時(shí) GOGC 環(huán)境變量的值,如果未設(shè)置該變量,則為100。負(fù)數(shù)百分比會(huì)禁用垃圾回收。
func SetMaxStack(bytes int) int
SetMaxStack 設(shè)置單個(gè) goroutine 堆??梢允褂玫淖畲髢?nèi)存量。如果任何 goroutine 在增長(zhǎng)堆棧時(shí)超過(guò)此限制,則該程序崩潰。SetMaxStack 返回先前的設(shè)置。初始設(shè)置在64位系統(tǒng)上為1 GB,在32位系統(tǒng)上為250 MB。
SetMaxStack 主要用于限制進(jìn)入無(wú)限遞歸的 goroutines 所造成的破壞。它只會(huì)限制未來(lái)的堆棧增長(zhǎng)。
func SetMaxThreads(threads int) int
SetMaxThreads 設(shè)置 Go 程序可以使用的最大操作系統(tǒng)線程數(shù)。如果它試圖使用超過(guò)這么多,程序崩潰。SetMaxThreads 返回先前的設(shè)置。初始設(shè)置是10,000個(gè)線程。
該限制控制操作系統(tǒng)線程的數(shù)量,而不是 goroutines 的數(shù)量。Go 程序僅在 goroutine 準(zhǔn)備好運(yùn)行時(shí)創(chuàng)建新線程,但由于使用 runtime.LockOSThread,所有現(xiàn)有線程在系統(tǒng)調(diào)用,cgo 調(diào)用中被阻止,或者被鎖定到其他 goroutine 。
SetMaxThreads 主要用于限制創(chuàng)建無(wú)限數(shù)量線程的程序所造成的損害。這個(gè)想法是在取消操作系統(tǒng)之前取消該程序。
func SetPanicOnFault(enabled bool) bool
當(dāng)程序在意外(非零)地址發(fā)生故障時(shí),SetPanicOnFault 控制運(yùn)行時(shí)的行為。這種故障通常是由運(yùn)行時(shí)內(nèi)存損壞等錯(cuò)誤引起的,所以默認(rèn)響應(yīng)是使程序崩潰。使用內(nèi)存映射文件的程序或內(nèi)存的不安全操作可能會(huì)導(dǎo)致出現(xiàn)故障的非零地址發(fā)生故障; SetPanicOnFault 允許這樣的程序請(qǐng)求運(yùn)行時(shí)只觸發(fā)恐慌,而不是崩潰。SetPanicOnFault 僅適用于當(dāng)前的 goroutine 。它返回以前的設(shè)置。
func SetTraceback(level string)
SetTraceback 在由于未發(fā)現(xiàn)的恐慌或內(nèi)部運(yùn)行時(shí)錯(cuò)誤而退出之前,設(shè)置運(yùn)行時(shí)在其打印的回溯中打印的詳細(xì)信息量。level 參數(shù)采用與 GOTRACEBACK 環(huán)境變量相同的值。例如,SetTraceback(“all”)確保程序在崩潰時(shí)打印所有的 goroutine 。詳情請(qǐng)參閱軟件包運(yùn)行時(shí)文檔。如果 SetTraceback 的調(diào)用級(jí)別低于環(huán)境變量的級(jí)別,則調(diào)用將被忽略。
func Stack() []byte
Stack 返回調(diào)用它的 goroutine 的格式化堆棧跟蹤。它調(diào)用 runtime.Stack 具有足夠大的緩沖區(qū)來(lái)捕獲整個(gè)跟蹤。
func WriteHeapDump(fd uintptr)
WriteHeapDump 將堆和其中的對(duì)象的描述寫(xiě)入給定的文件描述符。
WriteHeapDump 停止所有 goroutine 的執(zhí)行,直到堆轉(zhuǎn)儲(chǔ)完全寫(xiě)入。因此,文件描述符一定不能連接到另一端在同一個(gè) Go 進(jìn)程中的管道或套接字; 相反,使用臨時(shí)文件或網(wǎng)絡(luò)套接字。
堆轉(zhuǎn)儲(chǔ)格式在https://golang.org/s/go15heapdump中定義。
GCStats 收集有關(guān)最近垃圾收集的信息。
type GCStats struct { LastGC time.Time // time of last collection NumGC int64 // number of garbage collections PauseTotal time.Duration // total pause for all collections Pause []time.Duration // pause history, most recent first PauseEnd []time.Time // pause end times history, most recent first PauseQuantiles []time.Duration}