>  기사  >  백엔드 개발  >  Go 프로세스에서 고루틴 스택을 종료하지 않고 덤프하는 방법은 무엇입니까?

Go 프로세스에서 고루틴 스택을 종료하지 않고 덤프하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 00:22:02733검색

How to Dump Goroutine Stacks in a Go Process Without Terminating It?

Go 프로세스를 종료하지 않고 고루틴 스택을 덤프하는 방법

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)


    ...
}

SIGQUIT 신호가 수신되면 지정된 채널로 전달됩니다. 그 후, Runtime.Stack 함수는 스택 추적을 지정된 버퍼로 형식화합니다. 스택 추적이 버퍼 크기를 초과하면 잘려서 인쇄됩니다. 결과적으로 이 접근 방식을 사용하면 실행 중인 Go 프로세스를 중단하지 않고 각 고루틴에 대한 스택 추적을 캡처할 수 있습니다.

위 내용은 Go 프로세스에서 고루틴 스택을 종료하지 않고 덤프하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.