2009-07-08 3 views
23

Quando aggiungo le seguenti opzioni Java per attivare il debug:Tomcat non è riuscito a spegnere

JAVA_OPTS="$JAVA_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" 

ottengo il seguente errore ogni volta che provo a spegnere il 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) 

risposta

2

Sembra che la porta 5005 è già in uso. Controllare le porte aperte con il comando netstat.

Questo potrebbe essere perché hai già aperto tomcat. Controlla i tuoi processi.

27

Si sta tentando di eseguire il debug di tomcat all'avvio, quindi esegue il binding sulla porta 5005 all'avvio di jvm.

Quando si esegue catalina.sh stop, si avvia un'altra JVM, che cerca anche di associarsi alla porta 5005.

È necessario spostare i args debug per la corsa e iniziare argomenti (in catalina.sh) di Tomcat, mettendoli dritto nel JAVA_OPTS è la causa del problema che stai riscontrando.

1

Sembra che si stia avviando Tomcat con il Debugger abilitato, Questo fa sì che JVM si colleghi al processo per il debug, tuttavia in catalina.sh c'è un'istruzione case per start, stop, restart, così via e così via . L'emissione del comando stop lo aggiunge ancora poiché fa parte del Global JAVA_OPTS e tenta di avviare il debugger in ascolto sulla stessa porta per il comando shutdown. Se rimuovi l'indirizzo = 50005 dal tuo JAVA_OPTS o usi i comandi start jdpa per avviare la VM con il debugger, questo risolverà il tuo problema.

Osservare il catalina.sh predefinito nell'ultima distribuzione Tomcat se è necessaria una copia pulita. Sembra che qualcuno abbia apportato modifiche all'interno delle tue che non sono valide e che causano l'esecuzione di JDPA all'avvio, all'arresto, a qualsiasi comando emesso.

32

Grazie per una breve spiegazione, PHeath! Seguendo il tuo consiglio, ho trovato che il modo migliore per risolvere il problema è semplicemente quello di utilizzare anziché CATALINA_OPTS invece di JAVA_OPTS.

Guardando in catalina.sh, si può vedere CATALINA_OPTS è usato solo dai comandi "start" e "start-security", mentre JAVA_OPTS è anche usato dal comando "stop" (almeno con Tomcat 6.0.33 su openSUSE 12.1).

Almeno se Tomcat è installato su Linux utilizzando un gestore di pacchetti, quindi la modifica della variabile CATALINA_OPTS in /etc/tomcat6/tomcat6.conf (o qualsiasi altro percorso nella distribuzione) è più pulita di modificare direttamente lo script catalina.sh, per il gestore pacchetti si presuppone che l'utente modifichi solo i file di configurazione e l'interruzione di questa ipotesi potrebbe causare problemi durante l'aggiornamento dei pacchetti Tomcat (ad esempio, le impostazioni perse perché il file catalina.sh viene sovrascritto).

Penso che uno dovrebbe preferire CATALINA_OPTS su JAVA_OPTS non solo per JDWP ma anche per molte altre opzioni: e. g. se si usa l'opzione dimensione heap -Xmx ... allora sarebbe ragionevole inserirlo in CATALINA_OPTS, poiché il comando "stop" non ha bisogno di molto heap.

2

Ciò è dovuto al fatto che entrambe le applicazioni stanno ascoltando lo stesso numero di porta di 8000 in esecuzione in modalità di debug.

Una soluzione rapida è cambiare la porta di debug su 8001 all'avvio.bat

SET DEBUGPORT=8001

5

Il problema è che il vostro gatto è ancora in esecuzione sulla porta di debug (5005) o qualche altro servizio in esecuzione sulla stessa porta (5005).

Se Tomcat ancora in esecuzione, è possibile ucciderlo

  • se in ambiente Linux ps -ef | grep java, e identificare l'ID di processo di esso. e uccidere il processo utilizzando sudo kill -9.
  • Se in ambiente Windows è arrivato a Task Manager e ha ucciso il processo tomcat e java.

Ora dovresti essere in grado di avviare il server in modalità debug senza alcun problema.

Questo può verificarsi durante il test dell'unità di debug tramite lo strumento (eclissi) che è stato eseguito tramite il software. Solo per questo è possibile seguire lo stesso processo.

Prima chiudere Eclipse e terminare anche il processo java e riavviarlo.

0

set JPDA_ADDRESS = 8001 in catalina.bat cioè porta di debug e modificare tutte 3 porte in server.xml