Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Java > Développement Web en Java > Tomcat

Réponse
 
Outils de la discussion
Vieux 23/09/2008, 13h01   #1 (permalink)
Invité régulier
 
Date d'inscription: septembre 2006
Messages: 17
Par défaut "tomcat stop" n'arrête pas réellement tomcat

Bonjour,

quelquefois je n'arrive pas à arrêter le serveur tomcat en faisant

/etc/init.d/tomcat stop

(de mémoire cette commande me renvoie une bind exception et) en faisant un "ps -edf" je me rends compte que le process est toujours là.

Ce problème m'est arrivé en fait plusieurs fois (mais je ne m'en rends jamais compte tout suite,malheureusement), j'ai peut être une explication : peut-être ais-je arrêté à un moment ou à un autre le serveur tomcat et je l'ai redémarré trop vite avant que le processus précédent ne soit réellement arrêté.

Effectivement j'ai remarqué qu'après le tomcat stop le process tomcat, lui, est encore là quelques secondes ou millisecondes (ce que je trouve moyen de la part de tomcat d'ailleurs).

Avez-vous des retours d'expériences sur ce genre de problème ?
jreeman est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/09/2008, 13h37   #2 (permalink)
Modérateur
 
Date d'inscription: septembre 2007
Localisation: Pays des fourmis géantes, Belgique
Âge: 29
Messages: 3 085
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Par défaut

alors, le stop conciste à se connecter au port de maintenance de tomcat et à lui envoyer l'instruction "stop". De là tomcat décharge toutes ses webapps une à une, et cloture tout ses thread. Ensuite, la jvm devrait s'arreter. La commande de stop, en elle meme retourn imédiatement. Le process d'arret des webapp dépend de celles-ci, et peux varier de quelques secondes à plusieurs minutes suivant la taille des webapps. Si, après çà, tomcat tourne encore, c'est souvent que la webapp a d'elle meme instancié des threads (pas bien mais on a pas toujours le choix) et ne les a pas cloturé. Un jvm ne s'arrette pas d'elle même tant que tout ses threads ne sont pas morts.

Ce qui se passe parfios c'est qu'un tomcat se bloque (faute à la webapp) et ne réagisse dont plus au stop. Faut alors passer par kill.
__________________
Journaux de développement
Apprenez a poser vos questions, si vous voulez que j'y réponde!
Pas de Stacktrace, pas de chocolat!
Questions techniques en privé lettre morte
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/09/2008, 15h31   #3 (permalink)
Invité régulier
 
Date d'inscription: septembre 2006
Messages: 17
Par défaut

ok merci pour cette explication.

Pour les threads tout à fait cela ne métonne pas, on utilise un thread pool executor en interne et il y a aussi jboss cache qui a ses propres threads, du coup j'aimerais savoir qui n'arrête pas ses threads correctement. Vous rapelleriez vous quelle commande permet d'avoir un instantané des threads en cours dans la jvm ?
jreeman est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/09/2008, 17h33   #4 (permalink)
Modérateur
 
Date d'inscription: septembre 2007
Localisation: Pays des fourmis géantes, Belgique
Âge: 29
Messages: 3 085
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Par défaut

kill -3 sous unix
__________________
Journaux de développement
Apprenez a poser vos questions, si vous voulez que j'y réponde!
Pas de Stacktrace, pas de chocolat!
Questions techniques en privé lettre morte
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/09/2008, 10h34   #5 (permalink)
Invité régulier
 
Date d'inscription: septembre 2006
Messages: 17
Par défaut

humm je pensais pas à cela, je vais essayer de me renseigner (de mémoire c'est kill -sig ou java -sig).
jreeman est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/09/2008, 11h48   #6 (permalink)
Membre à l'essai
 
Date d'inscription: août 2007
Messages: 44
Par défaut

Par expérience, j'ai vu qu'il fallait laisser le temps à tomcat de s'arrêter, tant qu'il est dans les processus (un petit ps -aux | grep tomcat pour regarder) il ne faut surtout pas lancer le start.

Après y a toujours moyen de bidouiller le script /etc/init.d/tomcat, mais là ça deviens plus subtile. Sur un script de déploiement, j'ai du rajouter un sleep de près de 2mn pour le stop et le start pour éviter les problèmes.
gexian est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/09/2008, 15h17   #7 (permalink)
Invité régulier
 
Date d'inscription: septembre 2006
Messages: 17
Par défaut

Citation:
Envoyé par gexian Voir le message
Par expérience, j'ai vu qu'il fallait laisser le temps à tomcat de s'arrêter, tant qu'il est dans les processus (un petit ps -aux | grep tomcat pour regarder) il ne faut surtout pas lancer le start.

Après y a toujours moyen de bidouiller le script /etc/init.d/tomcat, mais là ça deviens plus subtile. Sur un script de déploiement, j'ai du rajouter un sleep de près de 2mn pour le stop et le start pour éviter les problèmes.
Oui exact en fait les thread dans les pool de java.util.concurrent ont un temps apellé keepAliveTime qui est le temps pendant lequel même si le thread n'est pas utilisé il est gardé en vie. Donc si l'application n'apelle pas le shutdown sur le pool il n'y a pas d'autre choix que d'attendre si il y avait encore de l'activité dans les n derniers instants avant l'appel à tomcat stop. Personnellement, j'ai mis cette valeur à 20 secondes (je n'apelle pas shutdown, c'est un choix). La valeur par défaut c'est 60 secondes je crois.

Mais je recherche tooujours cette commande magique qui me permettra la prochaine fois que ca arrive (si ca arrive) de voir les threads existants dans la jvm.
jreeman est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/09/2008, 17h31   #8 (permalink)
Modérateur
 
Date d'inscription: septembre 2007
Localisation: Pays des fourmis géantes, Belgique
Âge: 29
Messages: 3 085
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
Par défaut

je te l'ai donnée la commande :/ Y a pas 36.000 commande sous linux / unix, faut envoyer le signal 3 à la jvm, elle fait alors un Thread dump dans stdout. (Soit donc au final dans catalina.out)
__________________
Journaux de développement
Apprenez a poser vos questions, si vous voulez que j'y réponde!
Pas de Stacktrace, pas de chocolat!
Questions techniques en privé lettre morte
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/09/2008, 20h26   #9 (permalink)
Invité régulier
 
Date d'inscription: septembre 2006
Messages: 17
Par défaut

oui désolé, tu as raison. et c'est bien cela ca se retrouvait dans le catalina.out.
(ce qui m'a trompé c'est que je l'avais taper comme ca "kill -SIGQUIT pid" ce qui est exactement pareil).
jreeman est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVAFAQsTUTORIELSJAVASEARCHSOURCESLIVRESOUTILS, EDI & APIECLIPSENETBEANSBLOGDISCUSSIONSTV

Réponse

Précédent   Forum des développeurs > Java > Développement Web en Java > Tomcat



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide