2016-08-24 9 views
2

서비스 상태가 교착 상태 인 것으로 보이는 창에서 디버깅을하고 싶습니다. 아마도 접근 방식은 덤프를 수행하는 것입니다. Go 서비스 프로그램 덤프를 어떻게 할 수 있습니까? 그리고 그 덤프를 분석할까요?Windows에서 Go 프로그램을 강제로 덤프 할 수 있습니까?

+0

"덤프"란 무엇을 의미합니까? 스택 추적 또는 코어 파일을 원하십니까? – JimB

+0

나는 핵심 파일을 믿는다. 교착 상태 문제를 파악하려면 전체 주를 필요로한다고 생각합니다. 스택 추적은 스택 추적을 발생시킨 시간에 따라 달라질 수 있습니다. – lucidquiet

+0

코어 파일은 또한 생성 할 때의 상태에 따라 달라집니다. 빠른 google은 https://support.microsoft.com/en-us/kb/241215를 가리 킵니다. 스택 추적은 각 goroutine이 차단 된 위치를 보여주는 훨씬 쉬운 방법입니다. – JimB

답변

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 명령을 실행 할 수 있습니다

https://golang.org/cmd/trace/

여기 예를 들어 출력 거기를 :

https://talks.golang.org/2015/dynamic-tools.slide#30