서비스 상태가 교착 상태 인 것으로 보이는 창에서 디버깅을하고 싶습니다. 아마도 접근 방식은 덤프를 수행하는 것입니다. Go 서비스 프로그램 덤프를 어떻게 할 수 있습니까? 그리고 그 덤프를 분석할까요?Windows에서 Go 프로그램을 강제로 덤프 할 수 있습니까?
2
A
답변
1
나는 이것을 runtime.Stack 기능을 사용하여 수행했습니다. 출력은 panic()에서 얻은 것과 같지만 프로그램을 중단하지 않고 그대로 유지됩니다. 원하는 경우 파일 핸들러를 설정하여 파일/stdout에 스택을 덤프하거나 규칙적인 간격으로 스택을 덤프하는 goroutine을 시작할 수 있습니다.
runtime/debug 패키지를 확인해 볼 수도 있습니다.
0
골 루터 교착 상태 분석은 trace
명령을 사용하여 잘 처리됩니다.
먼저, 언제든지 원하는 추적을 실행할 데이터를 얻어야합니다. pprof
패키지 또는 trace
패키지를 사용하면이 문제를 해결할 수 있습니다.
https://golang.org/pkg/net/http/pprof/ https://golang.org/pkg/runtime/trace/
pprof
패키지는 웹 서버로 HTTP 처리기를 추가하고 (응용 프로그램이 실행되는 동안 trace
패키지는 당신이 스트림에 추적을 작성할 수 있습니다 동안, 추적 데이터를 수집하게됩니다 예를 들어, 파일),하지만 난 그 자신을 시도하지 않았습니다.
당신이 추적 데이터를 수집하면, 당신은 당신이 국가의 웹보기를 생산하기 위해 수집 한 데이터에 대한 trace
명령을 실행 할 수 있습니다
여기 예를 들어 출력 거기를 :
를
"덤프"란 무엇을 의미합니까? 스택 추적 또는 코어 파일을 원하십니까? – JimB
나는 핵심 파일을 믿는다. 교착 상태 문제를 파악하려면 전체 주를 필요로한다고 생각합니다. 스택 추적은 스택 추적을 발생시킨 시간에 따라 달라질 수 있습니다. – lucidquiet
코어 파일은 또한 생성 할 때의 상태에 따라 달라집니다. 빠른 google은 https://support.microsoft.com/en-us/kb/241215를 가리 킵니다. 스택 추적은 각 goroutine이 차단 된 위치를 보여주는 훨씬 쉬운 방법입니다. – JimB