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」を公開した。TDAJavaで開発された分析ツール。アプリケーションサーバのようなプロダクション環境をオフラインで分析するために開発されている。成果物はLGPLのもとで公開されている。


1.5ではJConsoleプラグインが追加された点が注目される。TDAをJConsoleプラグインとして使えるようになったほか、JConsoleプラグインとして動作している場合にJMXを経由してスレッドダンプリクエストを送信する機能が実現された。


Sun Javaで動くアプリを解析するスレッドダンプアナライザ - TDA 1.5登場


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も取得!!


なんかすごく手間がかかったです・・・・