2009-07-08 9 views
23

に失敗しました:私はデバッグを有効にするには、次のJavaオプションを追加するとTomcatがシャットダウン

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) 

答えて

2

それはポートと思われます5005はすでに使用中です。 netstatコマンドで開いているポートを確認してください。

これは、既にtomcatを開いている可能性があります。プロセスを確認してください。

27

起動時にtomcatをデバッグしようとしているため、jvmが起動するときにポート5005にバインドされます。

あなたがcatalina.sh stopを実行すると、それはまっすぐにそれらを入れて、Tomcatののもあなたが実行するために、デバッグ引数を移動し、(catalina.shで)議論を開始する必要があるポート5005

にバインドしようとした別のJVMを起動しますJAVA_OPTSにあなたが持っている問題の原因です。

1

デバッガを有効にしてTomcatを起動しているように見えますが、これによりJVMがデバッグのプロセスにアタッチされますが、catalina.shにはstart、stop、restartなどのcase文があります。 。 stopコマンドを発行すると、グローバルJAVA_OPTSの一部であるため、シャットダウンコマンドの同じポートでリッスンしているデバッガを開始しようとするため、このコマンドが追加されます。 JAVA_OPTSからアドレス= 50005を削除するか、またはstart jdpaコマンドを使用してデバッガでVMを起動すると、問題が解決されます。

クリーンコピーが必要な場合は、最新のTomcatディストリビューションのデフォルトcatalina.shを見てください。誰かがあなたの内部で変更を加えたように聞こえて、無効でJDPAが開始、停止、コマンド発行時に実行されるようになります。

32

素敵な短い説明、PHeathありがとうございました!あなたのアドバイスに従って、問題を解決する最善の方法は、に、JAVA_OPTSの代わりにCATALINA_OPTSを使用することです()。

catalina.shを見ると、CATALINA_OPTSは "start"と "start-security"コマンドでのみ使用され、JAVA_OPTSは "stop"コマンドでも使用されます(少なくともTomcat 6.0.33ではopenSUSE 12.1を参照してください)。

少なくとも、パッケージマネージャを使用してLinuxにTomcatをインストールした場合、catalina.shスクリプトを直接変更するよりも、/etc/tomcat6/tomcat6.conf(またはディストリビューション内のどのパスでも)のCATALINA_OPTS変数を変更する方が賢明です。パッケージマネージャは、ユーザーが設定ファイルのみを変更し、この仮定を破ると、Tomcatパッケージをアップグレードするときに問題が発生することが想定されています(catalina.shファイルが上書きされるため設定が失われるなど)。

JDWPだけでなく、他の多くのオプションについても、JAVA_OPTSよりもCATALINA_OPTSを優先する必要があります。e。 g。ヒープサイズのオプション-Xmxを使用する場合は、 "stop"コマンドが多くのヒープを必要としないので、CATALINA_OPTSに入れるのが妥当でしょう。

2

これは、両方のアプリケーションがデバッグモードで実行しているときに同じポート番号、つまり8000をリッスンしているためです。

1つの簡単な解決策は、起動時にデバッグポートを8001に変更することです。バット

SET DEBUGPORT=8001

5

問題は、あなたのTomcatがまだデバッグポート(5005)、または同一ポート上で実行されているいくつかの他のサービス(5005)上で実行されています。

Tomcatがまだ実行されている場合、あなたはそれが

  • Linux環境のps -efで、それならば殺すことができる|グレップのJava、およびそれのプロセスIDを識別します。 sudo kill -9を使用してプロセスを終了してください。
  • これは、Windows環境ではタスクマネージャーになっていて、TomcatとJavaプロセスを強制終了します。

これで、サーバをデバッグする際に、問題なくデバッグできるようになりました。

これは、mavenを通じて実行されたツール(eclipse)によるデバッグユニットテストで発生します。これを行うには、同じプロセスを流すことができます。

最初にEclipseを終了し、javaプロセスも終了してもう一度起動してください。

0

セットJPDA_ADDRESS = 8001にはcatalina.batすなわちデバッグポート とのserver.xml

にすべての3つのポートを変更します
関連する問題