TIM Labs

jvmの実行中スタックトレースを取得する

Javaのプログラムを実行した際、なんらかしらのバグや高負荷によりハングアップのような状態になることがあります。そうした際、jvmのスタックトレースを見ることでどこの処理まで到達しているか、またどの辺りでとまっているかを調査することが可能となります。

では、どのようにすればjvmで実行中のプログラムのスタックトレースを取得できるのでしょうか。
答えはいたって簡単で、jstackを実行すればよいのです。

jstackはJDKインストール時に$JAVA_HOME/bin/jstack に置かれます。JREには含まれないので注意です。
実行方法は
$ jstack <pid>
です。
JavaSEのサイトに詳しい説明があるので、オプションなどはそちらを参考にしてください。扱いとして「試験的」となっているので、今使えるといって今後も使えるかはわからないので注意してください。


実行中のjvmのプロセスIDがわからない場合は、
$ jps
とコマンドを実行することで、実行中のJavaVMのプロセスID(pid)がわかります。

jstackを実行することで動作中のJavaVMが停止することは無いので、安心して使ってみてください。

このほかにもJDKにはいくつもの開発(やデバッグ、運用など)を手助けするツール類が含まれています。すぐに使うわけではなくとも、目を通しておくとよいかもしれません。いつか役に立つことがあるでしょう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/133

コメントする

このブログ記事について

このページは、SHIMANE, Yoshikazuが2011年3月17日 18:48に書いたブログ記事です。

ひとつ前のブログ記事は「Git使いがMercurial使いに転職するとき設定しておくべきMercurial拡張」です。

次のブログ記事は「gitで統合ブランチへ取り込まれたトピックブランチの一覧を抽出する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。