Je tente d'avoir Tomcat, qui fonctionne actuellement en tant que service sur une boîte Windows 2003, débarrassez-vous sur un (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.) P>
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 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. P>
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? P>
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 Sûrement quelqu'un d'autre a eu un problème similaire? P> OutofMemorororror code>. p>.
OutofMemoryError code> 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 code> (si évidemment
123 code> est remplacé par le PID de la JVM). Aucun
.HProf code> existe n'importe où. P>
jvm.dll code> directement. Quand je fais cela, le service ne démarre pas. P>
7 Réponses :
Les fichiers Je suggère de poster une nouvelle question (sur http://superuser.com ) Demander quel "répertoire actuel" signifie pour un service Windows. < / p> .HProf code> 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. P>
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.
Avez-vous essayé -xx: option HeapDumpath? P>
http://java.sun.com/javase/technologies/hotspot /vmoption.jsp P>
à partir de 20 conseils pour Utilisation de Tomcat en production P>
Ajoutez les éléments suivants à votre Java_opts dans Catalina.sh (ou catalina.bat pour Windows): - xx: + tasdumponoutofmemoryError -xx: heapdumpath = / home / j2ee / heapdumps Code> P>
Le problème est que aucun script n'est invoqué par le moniteur de service.
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. P>
http://tomcat.apache.org/tomcat -5.5-DOC / Windows-Service-HOWTO.HTML P>
Merci; C'est bien utile, mais j'aurais dû mentionner que je couronne Tomcat 6.
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. P>
Premièrement, si vous installez Tomcat sous Windows, n'utilisez pas le programme d'installation OK, vous avez donc installé Tomcat à partir de la distribution Modifier le fichier .exe code>, 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 code> dans le répertoire en cours et aucune quantité de Security Security de Windows ne semble faire disparaître ce problème. P>
.zip code>. Installez-le comme service à l'aide du script
service.bat code>. 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. P>
service.bat code> pour inclure le
-xx: + tasdumponOutOfMemorylorororror code> et le
-xx: heapdumpath = c: \ Quelque code> options dans le bon endroit (où vous pouvez mettre des options JVM). Cela devrait faire l'affaire. P>
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. P>
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, P>
jmap -dump: fichier = d: \ tasdump \ myheapdump.hprof -f #pid_no # p> blockQuote>
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 p>
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.