10
votes

Puis-je obtenir Tomcat en cours d'exécution comme service pour vider un tas?

Je tente d'avoir Tomcat, qui fonctionne actuellement en tant que service sur une boîte Windows 2003, débarrassez-vous sur un OutofMemorororror . .

(Tomcat exécute Hudson, qui signale un problème d'espace de tas à la fin de ma construction. L'exécution de la construction ne produit manuellement aucune erreur. Les gars de Hudson ont besoin d'un dépotoir de tas pour commencer.)

Comme indiqué ailleurs, j'ai dit au moniteur de service Apache de configurer le JVM qu'il utilise pour exécuter tomcat pour vider le tas lorsque un OutofMemoryError est rencontré en ajoutant ce qui suit aux options JVM: -Xx: + tasdumponOutofmemororyError Ensuite, je cours la construction à nouveau. Bien sûr, il indique qu'il y avait une erreur de tas. Je numérise le disque entier à la recherche du fichier java_pid123.hprof (si évidemment 123 est remplacé par le PID de la JVM). Aucun .HProf existe n'importe où.

Je suis pris dans une prise 22: J'ai besoin du dépotoir de tas pour les gars de Hudson pour réparer leur fuite de mémoire, mais je ne peux pas obtenir le vidage du tas si je gère Hudson sous Tomcat.

Y a-t-il une manière particulière, lorsque Tomcat est en cours d'exécution en tant que service Windows, pour obtenir un vidage de tas d'entre eux sur une sortie supérieure?

L'autre chose que j'ai essayée est de le dire, dans les onglets de démarrage et d'arrêt, d'utiliser l'option "Java" au lieu de "JVM". Je pense que cela devrait indiquer au responsable de service de tenter de démarrer Tomcat avec une commande exécutable Java au lieu de lancer le jvm.dll directement. Quand je fais cela, le service ne démarre pas.

Sûrement quelqu'un d'autre a eu un problème similaire?


1 commentaires

Je devrais mentionner que j'ai attaché à Tomcat avec JConsole et observé que l'utilisation du tas ne grimpe jamais au-dessus de 60 Mo.


7 Réponses :


0
votes

Les fichiers .HProf sont largués dans le répertoire actuel. Exactement ce que cela signifie pour un service Windows est que quelqu'un devine, en supposant que cela signifie quelque chose.

Je suggère de poster une nouvelle question (sur http://superuser.com ) Demander quel "répertoire actuel" signifie pour un service Windows. < / p>


3 commentaires

Répertoire actuel, peut-être, mais aucun fichier .HProf n'est présent sur la machine du tout.


Il est donc possible que Windows Services n'ait aucun "répertoire actuel" et Windows déverse le fichier dans le vide. Ma suggestion sur la découverte de plus sur les stands de services Windows.


Le moniteur de service affirme que le répertoire actuel est C: \ Program Files \ Apache Tomcat \ Tomcat 6.0. J'ai écrit un servlet qui génère un fichier dans le répertoire en cours et le fichier apparaît dans ce répertoire.



2
votes

Avez-vous essayé -xx: option HeapDumpath?

http://java.sun.com/javase/technologies/hotspot /vmoption.jsp


0 commentaires

0
votes

à partir de 20 conseils pour Utilisation de Tomcat en production

Ajoutez les éléments suivants à votre Java_opts dans Catalina.sh (ou catalina.bat pour Windows): - xx: + tasdumponoutofmemoryError -xx: heapdumpath = / home / j2ee / heapdumps


1 commentaires

Le problème est que aucun script n'est invoqué par le moniteur de service.



1
votes

J'ai trouvé le lien suivant, qui décrit comment configurer le service Tomcat (inclut le paramétrage des paramètres Java). Je ne sais pas si cela s'applique à la version que vous utilisez.

http://tomcat.apache.org/tomcat -5.5-DOC / Windows-Service-HOWTO.HTML


1 commentaires

Merci; C'est bien utile, mais j'aurais dû mentionner que je couronne Tomcat 6.



6
votes

Après avoir enfin en place celui-ci, je voulais répondre à cela pour d'autres personnes qui pourraient avoir le même problème.

Premièrement, si vous installez Tomcat sous Windows, n'utilisez pas le programme d'installation .exe , même s'il est promu par Apache. Cela ne vous laissera pas courir tomcat comme autre chose que le compte système, peu importe ce que vous faites. Il semble que le compte système ne dispose pas de privilèges d'écrire des fichiers .HProf dans le répertoire en cours et aucune quantité de Security Security de Windows ne semble faire disparaître ce problème.

OK, vous avez donc installé Tomcat à partir de la distribution .zip . Installez-le comme service à l'aide du script service.bat . Assurez-vous qu'il est défini pour exécuter en tant qu'utilisateur spécifique que vous avez créé spécifiquement à cette fin. Assurez-vous également que le dossier que vous souhaitez que TOMCAT soit écrit en cas de vidage de tas est écritable par cet utilisateur.

Modifier le fichier service.bat pour inclure le -xx: + tasdumponOutOfMemorylorororror et le -xx: heapdumpath = c: \ Quelque options dans le bon endroit (où vous pouvez mettre des options JVM). Cela devrait faire l'affaire.


0 commentaires

0
votes

Si vous avez installé Tomcat avec .exe, vous pouvez configurer le service Tomcat pour utiliser un compte autre que le compte système local et vous pouvez affecter les droits de l'utilisateur sur le répertoire "C: \ Yone" où vous créez votre fichier de vidage. Une chose ici pour rappeler le service Tomcat ne fonctionne pas avec un compte ayant des privilèges administratifs. Créez donc un utilisateur simple sous Windows (membre du groupe d'utilisateurs) et définissez les services Tomcat sur l'utilisateur de ce compte. et donner aux droits de l'utilisateur sur "C: \ Quelque chose". Cela résout le problème des droits de l'utilisateur, mais vous devez configurer Tomcat pour des erreurs de mémoire de mémoire.


0 commentaires

1
votes

Lorsque le processus Java est exécuté en tant que service de fenêtre, vous pouvez générer le tas de tas en utilisant des étapes ci-dessous,

  1. Exécutez la console de commande en tant qu'administrateur
  2. Version de JDK (pour la commande JMAP) et JRE (JAVA Application de l'environnement de l'application JAVA) devrait être identique.
  3. Obtenez le PID NON de processus de course à la fenêtre pour cette application Java de Task Manager
  4. exécuter ci-dessous commande

    jmap -dump: fichier = d: \ tasdump \ myheapdump.hprof -f #pid_no #

    Si vous avez une exception avec JDK / JRE 7, essayez la même chose avec JDK / JRE 8 En fait, je suis confronté à un problème dans JMAP avec JDK 7, mais lorsque j'ai déménagé à JDK 8, j'ai pu générer avec succès le vidage du tas en utilisant la même commande


0 commentaires