2013年10月8日火曜日

Tomcatですでにデプロイされているwarファイルをリモートデバッグしてみた

■環境
・ローカル
Windows7 64bit
eclipse 3.8
・リモート
Java 1.7.0_17
Tomcat 7.0.32.0
※Tomcatはchefでインストールした際の設定方法を記載します
参考URL:http://kakakikikeke.blogspot.jp/2013/06/cheftomcatjvm.html

■概要
どうしもローカルのeclipse上でWebアプリケーションをデバッグできない状態だけど
リモート環境(今回はクラウド上のサーバ)だったらwarが展開されサービスの動作確認が出来る場合に
リモートの環境を使ってあたかもローカルでデバッグしているかのようにできる手法を紹介します

■設定
1. Tomcatの起動オプション修正
8000番でLISTENしローカルから接続するようにします
起動ファイルを以下のように設定し起動時にリモートデバッグが有効になるようにします

vim /etc/default/tomcat7
JMX_OPTS="$JMX_OPTS\
-Xdebug\
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

service tomcat7 restart

netstat -an | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:*            LISTEN

8000番でLISTENしていることを確認する

2. Eclipse設定
ローカル側に存在するリモート側に展開されているプロジェクトを右クリックし
デバッグ→デバッグの構成をクリック
開いたダイアログから「リモートJavaアプリケーション」を探しダブルクリックするとプロジェクト名のデバッグ構成が作成されます

※都合によりプロジェクト名はマスクしてあります

ホスト(IPアドレス)、ポートを設定してデバッグを押下します
また、デバッグする前にbreakpointをローカル側のソースに設定しておきましょう
eclipse上のパースペクティブもデバッグ用のパースペクティブに変更しておくといいと思います

3. 実際にリクエストをサーバに送る
breakpointでサーバ側のプログラムが停止します
ブラウザでリクエストを送った場合はブラウザが読み込み中等で停止していることが確認できるかと思います

■Tips
  • リモートサーバ上で8000番をLISTENするのでローカル -> 8000/tcp -> リモートの通信ができるようにFWの設定等を変更します
  • サーバ側でnetstat -an | grep 8000を実行してESTABLISHEDになっていることを確認しましょう
  • ESTABLISHEDになっていない場合はeclipse側のプロキシの設定やFWの設定を疑いましょう
  • リモート側のソースコードとローカル側のソースコードが常に同期しているようにしてください、差分があるとうまく動作しないことがあるようです

0 件のコメント:

コメントを投稿