|
カテゴリ:IT
問題提起編で、Windows で java アプリをサービス起動した際に、スレッドダンプをどうやって取得するか?というテーマをうちたてました。
スレッドダンプを取得するため Ctrl + Break が押せないのなら、何らかのツールでスレッドダンプをとればいいわけです。ということで、様々なツールを検討してみましょう。 <サーバサイドアプリケーションインフラ付属ツール> スレッドダンプはどういときとりたいかというと、java で動いているサーバサイドアプリケーションでハングとかスローダウンが発生し、原因を究明したいときです。で、サーバサイドアプリケーションを動かすインフラといえば、Java2 EE/Java EE系のミドルウェアですね。例えば、IBM の WebSphere Application Server とか BEA の WebLogic Server、オープンソース系だと JBoss とか Tomcat とか。そういうのには、スレッドダンプを取得するツールが付属していることがあります。そういった java 系ミドルウェアを使っているのなら、そういったツールを使うといいでしょう。ベンダ製であれば、サポートしてくれるし。 でも、それ以外の用途では使えないのがデメリットとしてあげられますね。つまり、Java EE 系のミドルウェアを使わずに、自分で作った java アプリケーションではそれらのツールを使ってスレッドダンプ取得といったことができないわけです。 <Java 仮想マシン付属ツール> Java アプリケーションを動かすには、現状 java 仮想マシン(以後、JVM)が必要ですが、JVM をふくむ開発キット(以後、JDK)にスレッドダンプを取得可能なツールがついていることがあります。 JDK でもっとも有名でかつ事実上の標準となっているのは、Sun 社のものですね(以下、Sun JDK)。GUI 系だと jconsole でスレッドダンプがとれますね(こんなイメージ)。CUI 系だと、jstack を使うとそれっぽいのが取得できます。でも、jconsole は J2SE 5.0 から、jstack の Windows 版は JSE 6.0 でないと使えないです。 スレッドダンプを取得して解析が必要な java アプリケーションといえば、多くはハングとかスローダウンが直接影響する企業向けアプリケーションです。この分野では、実際のところ J2SE 1.4.2 が未だに主流であり、ようやく J2SE 5.0 が使われだしてきたところです(2006 年 5 月現在)。JSE 6.0 はそもそもまだβの段階なので実用段階にもないです(2006 年秋正式リリース予定)。そういった意味では jconsole や jstack は、実際のところ使えないということになりますね。 Sun JDK 以外で、J2SE 1.4.2 ベースの JDK でスレッドダンプが取得できるツールを提供しているものもありますが(例えば、BEA JRockit の jrcmd(コマンドリファレンス)とか JRockit 管理コンソールとか)、その JDK でしか使えないというデメリットがありますね。 #ま、jconsole とか jstack も Sun JDK でしか使えないですが。 * * * なんだか、どれも一長一短という感じですねぇ。もっとジェネラルな方法はないのか?ということで、次回最終回「Windows で java スレッドダンプ取得 - 原点回帰編」で最終結論に至る!? お気に入りの記事を「いいね!」で応援しよう
最終更新日
2006年05月27日 18時27分16秒
コメント(0) | コメントを書く
[IT] カテゴリの最新記事
|