web-dev-qa-db-fra.com

Tomcat n'a pas réussi à s'arrêter

Lorsque j'ajoute les options Java suivantes pour activer le débogage:

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

J'obtiens l'erreur suivante chaque fois que j'essaie d'éteindre le 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)
26
Rahul

Merci pour une belle explication, PHeath! Suite à vos conseils, j’ai trouvé que le meilleur moyen de résoudre le problème est simplement de utiliser CATALINA_OPTS au lieu de Java_OPTS .

En regardant catalina.sh, on peut voir que CATALINA_OPTS n'est utilisé que par les commandes "start" et "start-security", alors que Java_OPTS est également utilisé par la commande "stop" (au moins avec Tomcat 6.0.33 sous openSUSE 12.1).

Du moins si vous avez installé Tomcat sous Linux à l'aide d'un gestionnaire de paquets, modifier la variable CATALINA_OPTS dans /etc/Tomcat6/Tomcat6.conf (ou le chemin de votre distribution) est plus propre que de modifier directement le script catalina.sh, pour le gestionnaire de paquets suppose que l'utilisateur ne modifie que les fichiers de configuration et que le non-respect de cette hypothèse peut entraîner des problèmes lors de la mise à niveau des packages Tomcat (par exemple, perte des paramètres car le fichier catalina.sh est écrasé).

Je pense qu'on devrait préférer CATALINA_OPTS à Java_OPTS non seulement pour JDWP mais également pour de nombreuses autres options: e. g. si on utilise l'option de taille de segment -Xmx ..., il serait raisonnable de la mettre dans CATALINA_OPTS, car la commande "stop" n'a pas besoin de beaucoup de segment de mémoire.

35
Jaan

Vous essayez de déboguer Tomcat au démarrage. Il est donc lié au port 5005 au démarrage de JVM.

Lorsque vous exécutez catalina.sh stop, il lance un autre fichier jvm qui tente également de se connecter au port 5005.

Vous devez déplacer les arguments de débogage vers l'exécution et les arguments de démarrage (dans catalina.sh) de Tomcat. Les mettre directement dans le Java_OPTS est la cause du problème que vous rencontrez. 

27
PHeath

Le problème est que votre Tomcat est toujours en cours d’exécution sur le port de débogage (5005) ou sur un autre service exécuté sur le même port (5005).

Si Tomcat fonctionne toujours, vous pouvez le tuer

  • si c'est dans l'environnement linux ps -ef | grep Java , et en identifier l'ID de processus. et tuez le processus en utilisant Sudo kill -9
  • Si cela dans l'environnement Windows est arrivé au gestionnaire de tâches et tuer le processus Tomcat et Java. 

Maintenant, vous devriez être capable de démarrer le serveur en mode débogage sans aucun problème.

Cela peut se produire lors du test d'unité de débogage via l'outil (Eclipse) qui a été exécuté via le maven. Pour cela, vous pouvez suivre le même processus. 

Commencez par fermer Eclipse, puis supprimez le processus Java et redémarrez-le. 

7
Dinusha

Il semble que le port 5005 soit déjà utilisé. Vérifiez les ports ouverts avec netstat command.

C'est peut-être parce que vous avez déjà ouvert Tomcat. Vérifiez vos processus.

2
Mercer Traieste

Cela est dû au fait que les deux applications écoutent le même numéro de port, à savoir 8000, en mode de débogage.

Une solution rapide consiste à changer le port de débogage en 8001 dans startup.bat

SET DEBUGPORT=8001

2
Venkatram Mutyala

Il semble que vous démarrez Tomcat avec le débogueur activé, ce qui oblige la JVM à se connecter au processus de débogage. Toutefois, catalina.sh contient une instruction case pour démarrer, arrêter, redémarrer, etc. L’émission de la commande stop ajoute toujours cela car elle fait partie de votre Global Java_OPTS et essaie de démarrer le débogueur en écoutant le même port que la commande shutdown. Si vous supprimez l'adresse = 50005 de votre Java_OPTS ou utilisez les commandes start jdpa pour démarrer le VM avec le débogueur, cela résoudra votre problème.

Regardez le fichier catalina.sh par défaut de la dernière distribution Tomcat si vous avez besoin d’une copie vierge. On dirait que quelqu'un à l'intérieur du vôtre a apporté des modifications non valides qui ont provoqué l'exécution de JDPA au démarrage, à l'arrêt et à toute commande émise.

1
Gary Steven

set JPDA_ADDRESS = 8001 dans catalina.bat i.e port de débogage et modifie les 3 ports dans server.xml

0
Saurabh