2009-07-08 19 views
23

Cuando agrego las siguientes opciones de Java para habilitar la depuración:Tomcat falló a la parada

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

me sale el siguiente error cada vez que intento apagar el 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) 

Respuesta

2

Parece que el puerto 5005 ya está en uso. Compruebe los puertos abiertos con el comando netstat.

Esto puede deberse a que ya ha abierto tomcat. Verifica tus procesos.

27

Está tratando de depurar tomcat en el inicio, por lo que se une al puerto 5005 cuando se inicia el jvm.

Cuando se ejecuta catalina.sh stop, se pone en marcha otra JVM que también intenta enlazar con el puerto 5005.

Es necesario mover los argumentos de depuración para la carrera y comenzar argumentos (en catalina.sh) de Tomcat, poniéndolos directamente en el JAVA_OPTS es la causa del problema que está teniendo.

1

Parece que está iniciando Tomcat con el depurador habilitado. Esto hace que la JVM se una al proceso de depuración. Sin embargo, en catalina.sh hay una declaración de caso para inicio, detención, reinicio, etc., etc. . Emitir el comando de detención aún agrega esto ya que es parte de su Global JAVA_OPTS e intenta iniciar el depurador escuchando en el mismo puerto para el comando de apagado. Si elimina la dirección = 50005 de su JAVA_OPTS o usa los comandos jdpa de inicio para iniciar la máquina virtual con el depurador, esto solucionará su problema.

Observe catalina.sh por defecto en la última distribución de Tomcat si necesita una copia limpia. Parece que alguien ha realizado cambios dentro de los suyos que no son válidos y hacen que JDPA se ejecute al iniciar, detener, cualquier comando emitido.

32

Gracias por una agradable breve explicación, PHath! Siguiendo su consejo, encontré que la mejor manera de resolver el problema es simplemente usar CATALINA_OPTS en lugar de JAVA_OPTS.

Al mirar en catalina.sh, se puede ver que CATALINA_OPTS solo se usa con los comandos "start" y "start-security", mientras que JAVA_OPTS también se usa con el comando "stop" (al menos con Tomcat 6.0.33 en openSUSE 12.1).

Al menos si tiene Tomcat instalado en Linux usando un administrador de paquetes, entonces la modificación de la variable CATALINA_OPTS en /etc/tomcat6/tomcat6.conf (o cualquier ruta en su distribución) es más limpia que cambiar directamente la secuencia de comandos catalina.sh, para el administrador de paquetes, se supone que el usuario solo cambia los archivos de configuración, y romper esta suposición puede causar problemas al actualizar los paquetes de Tomcat (por ejemplo, configuraciones perdidas porque el archivo catalina.sh se sobrescribe).

Creo que uno debería preferir CATALINA_OPTS sobre JAVA_OPTS no solo para JDWP sino también para muchas otras opciones: e. gramo. si uno usa la opción de tamaño de montón -Xmx ... entonces sería razonable ponerlo en CATALINA_OPTS, ya que el comando "detener" no necesita mucha pila.

2

Esto se debe a que ambas aplicaciones están escuchando el mismo número de puerto, es decir, 8000 mientras se ejecuta en modo de depuración.

Una solución rápida es cambiar el puerto de depuración a 8001 en el inicio.bate

SET DEBUGPORT=8001

5

El problema es que su gato todavía se está ejecutando en el puerto de depuración (5005) o algún otro servicio que se ejecuta en el mismo puerto (5005).

Si Tomcat aún en marcha, se puede matar

  • si en el entorno Linux ps -ef | grep java, e identificar el identificador de proceso de la misma. y mata el proceso usando sudo kill -9.
  • Si en el entorno de Windows llegó al administrador de tareas y matar el proceso de tomcat y java.

Ahora debería poder iniciar el servidor en el estado de depuración sin ningún problema.

Esto puede suceder en la prueba de la unidad de depuración a través de la herramienta (eclipse) que se ha ejecutado a través del maven. Para sole esto puedes hacer fluir el mismo proceso.

Primero cierre el Eclipse y elimine también el proceso java y vuelva a iniciarlo.

0

conjunto JPDA_ADDRESS = 8001 en el puerto de depuración es decir catalina.bat y cambiar los 3 puertos en server.xml

Cuestiones relacionadas