6
votes

Quelle est la bonne façon de recharger votre application à Tomcat d'Ant sans rencontrer des exceptions permanentes?

Mon équipe et je développe une application Web Java en utilisant Tomcat comme serveur de test de développement et notre fourmi comme outil de construction. Notre plate-forme est Windows, mais nous courons Tomcat hors de Cygwin car notre coquille préférée est bash. Nous avons rencontré des problèmes cohérents avec le manque de mémoire en raison des redémarrages fréquents de l'application afin de faire des fonctions nouvellement implémentées disponibles pour les tests.

Nous essayions à l'origine de recharger l'application en place sans redémarrer le serveur à l'aide du serveur à l'aide du serveur. Fourni Catalina Ant Task. Cela a travaillé pour quelques itérations, mais nous manquions toujours de l'espace Permgen. Pour être claire, cela se réfère aux tâches de fourmis regroupées avec Tomcat qui démarrent, arrêtez-vous, déploiement, de non-déploiement et énumérez l'application forte>. Encore une fois, cela fait plus d'environ 3 fois environ une erreur de mémoire Permgen et nous devrions aller tuer manuellement le processus Java de toute façon. C'est pourquoi nous essayons de tuer le serveur lui-même plutôt que l'application. P>

Notre prochaine idée était de redémarrer le serveur à chaque fois. Notre problème constant a été que l'arrêt du serveur ne semble pas tuer le processus Java. Finalement, la mémoire s'exprime simplement avec tous ces processus zombies, à moins que vous ne surveilliez et que vous les tuez manuellement. Les implémentations que j'ai essayées sont les suivantes: p>

  1. exécuter le pot de bootstrap directement . P>

     <target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
         <exec executable="bash" failonerror="true" >
             <arg line="-i ../tools/tomcat/bin/startup.sh" />
         </exec>
         <waitfor maxwait="30" maxwaitunit="second" timeoutproperty="tomcat.offline">
             <socket port="8081" server="127.0.0.1" />
         </waitfor>
         <fail if="tomcat.offline">Tomcat failed to come up.</fail>
     </target>
    
  2. exécuter l'arrêt | Démarrage.Bat Fichiers directement a > p>

     <target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
         <exec executable="bash" os="Windows" failonerror="true" >
             <arg line="-i ../tools/tomcat/bin/startup.bat />
         </exec>
         <waitfor maxwait="30" maxwaitunit="second" timeoutproperty="tomcat.offline">
             <socket port="8081" server="127.0.0.1" />
         </waitfor>
         <fail if="tomcat.offline">Tomcat failed to come up.</fail>
     </target>
    
  3. exécutant la fermeture | Démarrage.sh fichiers. P>

     <target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
         <java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
             <jvmarg value="-Dcatalina.home=${tomcat.home}" />
         </java>
         <waitfor maxwait="30" maxwaitunit="second" timeoutproperty="tomcat.offline">
             <socket port="8081" server="127.0.0.1" />
         </waitfor>
         <fail if="tomcat.offline">Tomcat failed to come up.</fail>
     </target>
    


1 commentaires

TAIMERTY devrait être TimeOutProperty - mais parce que cela semble ne pas indiquer votre problème - j'ai fait une édition directe à la question.


3 Réponses :


4
votes

Utilisez le TOMCAT TOPS . Catalina-Ant.jar est inclus dans la plupart des distributions Tomcat. Généralement, il est bon de combiner cela avec le Tâches TRY-CATCH Tâches .

-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:MaxPermSize=256m


2 commentaires

Merci pour la réponse! Si vous allez regarder le deuxième paragraphe un peu plus étroitement, je pense que vous remarquerez que nous n'utilisons pas ceux à cause des problèmes spatiaux de Permgen. C'est pourquoi j'essaie d'aller à la route du serveur. Cela peut être faux, mais cette réponse ne résout pas vraiment cela.


Je vois ça, oui. Désolé pour ça, j'ai ajouté un peu des choses Perm.



1
votes

Il y a des tâches Tomcat ant pour accomplir ces choses:

http://raibledesigns.com/wiki/wiki.jsp?page=tomcatanttasks

Peut-être qu'ils peuvent aider.


2 commentaires

Je ne suis jamais généralement plus rapide du tirage au sort. La tâche essaie est une addition fraîche.


Merci pour la réponse! Si vous allez regarder le deuxième paragraphe un peu plus étroitement, je pense que vous remarquerez que nous n'utilisons pas ceux à cause des problèmes spatiaux de Permgen. C'est pourquoi j'essaie d'aller à la route du serveur. Cela peut être faux, mais cette réponse ne résout pas vraiment cela.



0
votes

Je suggérerais de courir Tomcat en tant que service. Vous pouvez ensuite utiliser la tâche SSHEXEC.

à peine édité à partir de notre build.xml: xxx

le fichier restartContainer.bat appelle net stoppy% servicename%, nettoie les journaux de repère, Les fichiers temporaires, etc., puis appellent que le service de service de départ net%.

Cela fonctionne très bien pour nous dans le développement, la mise en scène et la production. Vous avez juste besoin d'un serveur SSH installé.


0 commentaires