非侵入式轉儲Go 進程堆疊
可以分析正在運行的Go 進程,而無需修改其程式碼或利用其內建的終止它
方法:
發送時向進程發出SIGQUIT 信號(例如,在Windows 上使用ctrl \ 或在Linux 上使用kill -SIGQUIT process_pid),定義的信號處理程序將攔截它並調用堆棧跟踪程。捕獲的追蹤將列印到標準輸出,提供進程的 goroutine 堆疊的詳細快照。
程式碼範例:
<code class="go">import ( "fmt" "os" "os/signal" "runtime" "syscall" ) func main() { sigChan := make(chan os.Signal) go func() { stacktrace := make([]byte, 8192) for _ = range sigChan { length := runtime.Stack(stacktrace, true) fmt.Println(string(stacktrace[:length])) } }() signal.Notify(sigChan, syscall.SIGQUIT) // ... Process Logic }</code>
以上是如何在不修改程式碼或終止的情況下轉儲Go進程堆疊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!