2016-08-24 4 views
2

私はサービスの状態がデッドロックであるように見えるウィンドウで何らかのデバッグをするつもりです。たぶんアプローチはダンプをすることでしょう。 Goサービスのプログラムダンプはどうしたらできますか?そのダンプを分析しますか?Windows上でGoプログラムのダンプを強制的に行うことはできますか?

+0

"ダンプ"とはどういう意味ですか?スタックトレースまたはコアファイルが必要ですか? – JimB

+0

私はコアファイルを信じています。私はデッドロックの問題を理解するために状態全体が必要だと思う。スタックトレースは、おそらく私がスタックトレースを引き起こした時間に依存するでしょう。 – lucidquiet

+0

コアファイルは、作成時の状態によっても異なります。クイックグーグルはhttps://support.microsoft.com/en-us/kb/241215を指しています。スタックトレースを使用すると、各ゴルーチンがブロックされている場所を簡単に表示できます。 – JimB

答えて

1

これはruntime.Stack機能を使用して行っています。その出力は、パニック()から取得したものと同等ですが、プログラムを停止することはありません。スタックをファイル/ stdoutにダンプするシグナルハンドラを設定したり、必要に応じて定期的にスタックをダンプするためのゴルーチンを起動することができます。

runtime/debugパッケージをチェックアウトすることもできます。

0

ゴルーチンデッドロック解析は、traceコマンドを使用してうまく処理されます。

まず、いつでもトレースを実行するためのデータを取得する必要があります。これは、pprofパッケージまたはtraceパッケージを使用して取得できます。

https://golang.org/pkg/net/http/pprof/ https://golang.org/pkg/runtime/trace/

traceパッケージはあなたがストリーム(例えばへのトレースを書き出すことができますしながら、pprofパッケージには、WebサーバへのHTTPハンドラを追加し、アプリの実行中にトレース・データを収集できるようになりますファイル)が、私は自分でそれを試していない。

あなたは、トレース・データを収集したら、あなたは状態のウェブビューを生成するために収集したデータに対してtraceコマンドを実行することができます。

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

出力例はここにあります:

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

関連する問題