次のJavaオプションを追加してデバッグを有効にします。
Java_OPTS="$Java_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
Tomcatをシャットダウンしようとすると、次のエラーが発生します。
ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initializedFATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
ニースの簡単な説明をありがとう、ピース!あなたのアドバイスに従って、私は問題を解決する最良の方法は単にJava_OPTSの代わりにCATALINA_OPTSを使用するであるとわかりました。
Catalina.shを調べると、CATALINA_OPTSは「start」コマンドと「start-security」コマンドでのみ使用されているのに対し、Java_OPTSは「stop」コマンドでも使用されていることがわかります(少なくともopenSUSE12.1のTomcat6.0.33では)。
少なくとも、パッケージマネージャーを使用してLinuxにTomcatをインストールしている場合は、/ etc/Tomcat6/Tomcat6.conf(またはディストリビューション内の任意のパス)のCATALINA_OPTS変数を変更する方が、パッケージマネージャーのcatalina.shスクリプトを直接変更するよりもクリーンです。ユーザーが構成ファイルのみを変更すると想定し、この想定を破ると、Tomcatパッケージのアップグレード時に問題が発生する可能性があります(例えば、catalina.shファイルが上書きされるため設定が失われる).
JDWPだけでなく、他の多くのオプションについても、Java_OPTSよりもCATALINA_OPTSを優先する必要があると思います。 g。ヒープサイズオプション-Xmx ...を使用する場合、「stop」コマンドは多くのヒープを必要としないため、CATALINA_OPTSに配置するのが妥当です。
起動時にTomcatをデバッグしようとしているため、jvmの起動時にポート5005にバインドします。
catalina.sh stop
を実行すると、ポート5005にバインドしようとする別のjvmが起動します。
デバッグ引数をTomcatの実行および開始引数(catalina.sh
内)に移動する必要があります。それらをJava_OPTS
に直接入れると、問題が発生します。
問題は、Tomcatがまだデバッグポート(5005)または同じポート(5005)で実行されている他のサービスで実行されていることです。
Tomcatがまだ実行されている場合は、それを強制終了できます
これで、問題なくサーバーをデバッグ気分で起動できるはずです。
これは、Mavenを介して実行されたツール(Eclipse)を介したユニットテストのデバッグ時に発生する可能性があります。これを裏付けるために、同じプロセスを実行できます。
最初にEclipseを閉じて、Javaプロセスも同様に強制終了し、再度開始します。
ポート5005はすでに使用されているようです。 netstatコマンドで開いているポートを確認します。
これは、Tomcatを既に開いていることが原因である可能性があります。プロセスを確認してください。
これは、デバッグモードで実行しているときに、両方のアプリケーションが同じポート番号、つまり8000をリッスンしているためです。
簡単な解決策の1つは、startup.batでデバッグポートを8001に変更することです。
SET DEBUGPORT=8001
デバッガーを有効にしてTomcatを起動しているようです。これにより、JVMがデバッグプロセスに接続されますが、catalina.shには、start、stop、restartなどのcaseステートメントがあります。これはグローバルJava_OPTSの一部であるため、stopコマンドを発行しても引き続き追加され、shutdownコマンドと同じポートでリッスンするデバッガーを開始しようとします。 Java_OPTSからaddress = 50005を削除するか、start jdpaコマンドを使用してVMをデバッガーで開始すると、問題が解決します。
クリーンコピーが必要な場合は、最新のTomcatディストリビューションのデフォルトのcatalina.shを確認してください。誰かがあなたの内部で無効な変更を加え、JDPAを開始、停止、発行されたコマンドで実行させているようです。
catalina.batでJPDA_ADDRESS = 8001を設定します。つまり、デバッグポートを設定し、server.xmlの3つのポートすべてを変更します。