- PR -

tomcat4.1.3のスレッドダンプの取得方法について

投稿者投稿内容
いちご
ベテラン
会議室デビュー日: 2007/03/13
投稿数: 80
投稿日時: 2007-03-13 10:36
tomcat4.1.3の動きが不安定な状態で、tomcatのサービスが落ちていたりする現象が見られます。
そこで、いろいろ調べている中で、本会議室のtomcatのスレッドダンプに関するスレッドに行き着き、いろいろとご拝見させて頂いたのですが、tomcat4.1.3のスレッドダンプの取得方法自体がよく理解できておりません。
お忙しい中大変に申し訳ございませんが、tomcat4.1.3のスレッドダンプの取得方法について、改めてご教示頂けないでしょうか。
何卒宜しくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-03-13 11:46
ここらへんが参考になるでしょうか。
クラッシュの解析方法↓
・BEA トラブルシューティング ガイド > サポートパターン > バイナリ コア ファイルの分析
http://www.beasys.co.jp/cs/support_news/product_troubleshooting/System_Core_Pattern.html

ハング状態の解析方法↓
・スレッドダンプの取り方 その3 / Windows サービスとして登録している場合は?
http://yusuke.homeip.net/diary/2006/09/24/1159032652540.html
-> Tomcat4.x でうまくいかない、とコメントにありますね。Tomcat5.x に付いてくる exe を使ってサービス登録してみるとか工夫が必要かもしれません。

・BEA トラブルシューティング ガイド > サポートパターン > 一般的なサーバ ハング
http://www.beasys.co.jp/cs/support_news/product_troubleshooting/System_Core_Pattern.html

スレッドダンプは通常ハング状態の時に取得して、その時点でどのスレッドが何を行おうとしているのか解析するものです。
クラッシュしている場合は core ファイルや hs_err_pid<PID #>.log を確認します。
または -XX:+ShowMessageBoxOnError (Sun JVM) や -Djrockit.waitonerror (JRockit) オプションをつけることでクラッシュ直前にスレッドダンプを取得するチャンスを得ることも運が良ければ出来ます。
いちご
ベテラン
会議室デビュー日: 2007/03/13
投稿数: 80
投稿日時: 2007-03-13 12:08
インギさん。
早速のご返信、有難うございます!。
ご助言をもとに、理解をすすめていきたいと思います。

ご助言の中に、専門用語がたくさんあり、なかなか難航しそうですが頑張ってみます。
また何か不明点がありました際に、ご助言頂けましたら幸いでございます。
有難うございました。
いちご
ベテラン
会議室デビュー日: 2007/03/13
投稿数: 80
投稿日時: 2007-03-13 13:47
ご助言頂きました”SendSignal”は、Tomcat4.1.3では、確かに当方の環境でも
取得できないようです。
また"StackTrace"ですが、客先で稼動するサーバ機は、インターネットにはつながっていないため、
オンラインでの解析もできず、"StackTrace"での方法も難しいものとなってきました。
スレッドダンプを取得する方法としまして、インターネットにつながっていない環境で、かつ常駐タスクのように、一定時間のtomcatのスレッドダンプがとれれば理想なのですが、このような条件下で、スレッドダンプを取られた方がおられましたら、ご助言頂ければ幸いです。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-03-13 14:00
まず、クラッシュしているのでしょうか?フリーズしているのでしょうか?
クラッシュしているのであればスレッドダンプよりも hs_err_pid<PID #>.log(Sun JVMの場合)を見る方が確実です。
-XX:+ShowMessageBoxOnError (Sun JVM) や -Djrockit.waitonerror (JRockit) でクラッシュ直前にスレッドダンプを取得できますが、クラッシュ時即座にスレッドダンプを取得しないとタイムアウトして、スレッドダンプをとるタイミングを逃してしまいます。再現性がなく、本番環境でしか調査出来ない場合はあまり現実的ではありません。

ちなみに JavaWebStart のアプリケーションは一度起動しておけばインターネットに繋がっていなくても起動できますよ
http://yusuke.homeip.net/diary/2006/09/22/1158883243000.html


Java6 をインストールして jstack を使うとか、
http://www.javainthebox.net/laboratory/JavaSE6/managementtools/mngtools.html
JRockit をインストールして jrcmd [pid] print_threads で取得する、といった方法もあります。
http://www.beasys.co.jp/BeaPortal/cs/solution/getSolution.do?solutionId=33968&page=2
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-03-13 14:03
そのTomcatはWindows上で動いているということでよいのでしょうか?
いちご
ベテラン
会議室デビュー日: 2007/03/13
投稿数: 80
投稿日時: 2007-03-13 14:09
>>インギさん
 すいません ご丁寧なご助言を頂いているにもかかわらず、なかなか進めずご迷惑をおかけし ております。本当にすいません(汗)
 現象としましては、フリーズに該当すると思います。
 tomcatの標準ログの中に、スレッドが75に到達している旨が見られていたのと、tomcatサー ビスを再起動することにより、復旧したことから、フリーズだと判断しております。 
 ネットにつながっていない環境での解析方法について、貴重な情報、大変に感謝いたします。
 早速、参考にさせて頂きます。有難うございます!

>>カーニーさん
 OSはWindows2003serverで、IIS6.0と組み合わせております。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-03-13 14:47
Tomcatのバージョンを4.1.32以降にすると、簡単にスレッドダンプが取れます。
このバージョンから、TomcatをWindowsサービスで動かす方法が"JavaService"から"Commons Daemon"に変更されました。

Commons DaemonはGUIを備えていて、ボタンをポチッと押すだけでスレッドダンプが取れます。

もし、Tomcatのアップグレードが難しい場合にも、サービス化のところだけCommons Daemonに置きかえることは可能だと思います。(が、具体的な方法は知りません)

スキルアップ/キャリアアップ(JOB@IT)