Tomcatをサービス起動、でJMX Remote接続&ThreadDump取得
環境
apache-tomcat-6.0.16
Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) 64-Bit Server VM
Windows Server 2003
Tomcatはサービスで起動
最初にやりたかったこと
ThreadDumpを取りたかった。ただ、それだけ。
まず、SendSignalを使う
Dos窓が出ている場合は、Ctrl+Breakでいいんだけど、サービスの場合はそれではダメ。
下記のページで紹介されているSendSignalを使用する。
これは指定したプロセスに Ctrl+Break を押下したのと同じ信号を送る、まさにスレッドダンプを取るために作られたプログラムです。
使い方は簡単、
SendSignal [プロセスID]
とするだけ。
プロセスID は Windows のタスクマネージャで確認できます。
Java - スレッドダンプの取り方 その3 / Windows サービスとして登録している場合は?
http://yusuke.homeip.net/diary/2006/09/24/1159032652540.html
で、エラー。
orz....
WASとかでSendSignalを使った時は動いていたのに・・・・。どうやら、Windows Server2003 か、64bitの辺りに問題がありそうだ。
SendSignalの本家のコメント欄に書かれているのと同じ症状で、回避方法は不明です。
次、Thread Dump Analyzer+Jconsole
The TDA Projectは6日(米国時間)、TDA(Thread Dump Analyzer)の最新版となる「TDA 1.5」を公開した。TDAはJavaで開発された分析ツール。アプリケーションサーバのようなプロダクション環境をオフラインで分析するために開発されている。成果物はLGPLのもとで公開されている。
1.5ではJConsoleプラグインが追加された点が注目される。TDAをJConsoleプラグインとして使えるようになったほか、JConsoleプラグインとして動作している場合にJMXを経由してスレッドダンプリクエストを送信する機能が実現された。
JConsoleにプラグインとして突っ込むことによって、スレッドダンプが取得可能とのこと。ローカルで動作も確認。で、目的の環境でやってみると、Tomcatのサービスがローカルプロセスとして認識できず、JConsoleがつながらない・・・・
orz....
JMX Remoteの接続設定をする
下記の設定をレジストリエディタを使って、サービスに追加。
- Dcom.sun.management.jmxremote.port=1234
- Dcom.sun.management.jmxremote.ssl=false
- Dcom.sun.management.jmxremote.authenticate=false
Jconsoleを起動し、接続ダイアログで「リモート」タブより、ようやく接続。
で、ThreadDumpも取得!!
なんかすごく手間がかかったです・・・・