2009-03-30 9 views
1

J'utilise Teamcity pour exécuter CI qui fonctionne très bien, à part une chose: lorsque ma webapp est déployée sur le conteneur web (Tomcat 5.5) après quelques instants, Tomcat est à court de Mémoire. C'est quelque chose que vous voyez aussi en développement, mais ce n'est pas un gros problème puisque vous pouvez redémarrer manuellement de toute façon - avec CI, tout est automatique ce qui le rend vraiment ennuyeux. J'ai essayé de configurer Teamcity pour qu'il redémarre Tomcat à chaque déploiement, mais j'ai ensuite rencontré un autre problème - le script de démarrage de Tomcat se bloque quand il est appelé depuis la fourmi (c'est-à-dire qu'il démarre très bien, mais ne va pas plus loin dans le processus de construction).Mon redéploiement Tomcat échoue lors de l'utilisation de Teamcity

Quelqu'un at-il une configuration Teamcity-Tomcat similaire?

Répondre

1

C'est un problème avec tomcat, le classloader et les classes ne sont pas collectées correctement. Chaque fois que vous rechargez le contexte webapp, plus de copies de ces classes sont chargées, et comme elles sont stockées dans la génération de tas permanente, elles finiront par manquer de mémoire. Vous pouvez increase the PermGen size au démarrage de tomcat, cela vous permettra seulement de re-délier plus de fois sans manquer de mémoire, ce n'est pas vraiment une solution, mais vous pouvez augmenter le nombre de déploiements jusqu'à ce que vous deviez redémarrer.

0

Nous avions exactement le même problème, et comme Mark Robinson le fait remarquer, il s'agit de faire en sorte que les classes ne soient pas collectées. Le problème particulier que nous avions était beaucoup de choses statiques chargées: log4j, contextes printaniers contenus dans des globals statiques, et autres bibliothèques de classes qui créaient des instances statiques ou des singletons.

Il était possible d'en tracer un grand nombre à l'aide d'un profileur, puis de traiter explicitement le nettoyage des ressources dans la méthode destroy() de la servlet. Bien que cela n'ait pas totalement résolu le problème, il en a soulagé une partie. À la fin, nous avons ajouté une paire supplémentaire de cibles ant pour arrêter et démarrer Tomcat, et nous avons enveloppé le processus de construction dans celles-ci. YMMV.

0

Je suppose que ce problème n'est pas spécifique à TeamCity. Comment appelez-vous le script de démarrage Tomcat à partir de Ant?

Si vous utilisez la tâche "exec", vous devez probablement définir l'attribut "spawn" sur true afin qu'il engendre Tomcat dans un autre processus. Autrement, Ant attend que le processus se termine avant de continuer. Dans nos déploiements, nous avons un script qui vérifie les niveaux permgen et (éventuellement) redémarre Tomcat si le permgen est trop élevé.

Questions connexes