J'ai une instance Tomcat qui expose le comportement suivant: p>
Le problème est que, au cours de la manipulation de la requête 400K, mon webApp génère environ 100 Mo de déchets qui remplissent l'espace Eden et déclenche une collection de jeunes générations. p>
J'ai essayé d'utiliser la fonctionnalité de Java HProf intégrée pour faire profilement des sites d'allocation, mais Tomcat ne semblait pas démarrer correctement avec cela en place. Il est possible que j'avais juste un peu impatient que j'imagine que l'allocation de mémoire Le profilage ait une hauteur élevée et que Tomcat Startup peut donc prendre beaucoup de temps p>
Quels sont les meilleurs outils à utiliser pour faire du profil de mémoire Java de très jeunes objets / ordures? Je ne peux pas utiliser des décharges de tas car les objets qui m'intéressent sont des ordures. p>
5 Réponses :
Vous devriez pouvoir obtenir des vidanges de tas de temps à travailler de toute façon en débogage de l'application, plaçant des points d'arrêt aux points clés du code et en créant un dépotoir de tas lorsque l'application est en pause à chaque point d'arrêt. P>
Je soupçonne que les ordures sont de courte durée dans ce cas, il serait extrêmement difficile de repérer les bits si la mémoire est nouvellement attribuée. Je veux idéalement quelque chose comme le profilage de la mémoire Visual VM que je peux exécuter mon processus Tomcat sur mon serveur Linux.
Vous pouvez utiliser le profileur dans Jvisalvm dans le JDK pour faire du profilage de la mémoire. P>
Demandez également aux modèles de cache le transformateur XSLT. P>
http: // java .sun.com / J2SE / 1.5.0 / DOCS / API / JAVAX / XML / Transform / TEMPLATES.HTML P>
Le profilage Jvisalvm est difficile car mon serveur Tomcat s'exécute sur Linux et je préférerais éviter l'ovehead de l'obtention d'exécution sur Windows où je fais mon développement ou installe une boîte GUI Linux.
Installez le JDK correspondant sur la Linuxbox et rediriger Jvisualvm pour utiliser un serveur X11 en cours d'exécution sur votre boîte Windows. Xming directement sur la machine ou Knoppix en cours d'exécution dans une session VMware, fonctionne très bien.
Notez également que si vous ajoutez le vaudou approprié à l'invocation Tomcat JVM, VisualVM peut vous connecter à partir de votre boîte de fenêtre sans autre ADIEU.
Jetez un coup d'œil à comment activer la surveillance JMX distante java.sun.com/j2se/1.5.0/docs/guide/management/agent.html#rem Ote . À Tomcat, il suffit de placer les arguments dans bin / setenv.sh (c'est-à-dire exportation catalina_opts = 'com.sun.management.jmxremote.port = 12345' code> etc.)
Je pense que la redirection de x est susceptible d'être le meilleur pari. Autant que je sache, Visualvm peut se connecter à distance mais ne peut pas effectuer de profilage de la mémoire distante.
En fait, la meilleure solution ressemble au profileur NetBeans qui prend en charge le profilage à distance de Tomcat, ce que je veux exactement. Je vais essayer cela demain.
Vous voudrez peut-être essayer LambdaProbe , qui est un profileur pour Tomcat. Il prend en charge les éléments suivants: P>
Lambda Sonde (anciennement Tomcat Sonde) est une application Web suffisante, qui aide à visualiser divers paramètres d'une instance Apache Tomcat en temps réel. La sonde Lambda est conçue pour fonctionner spécifiquement à Tomcat, il est donc capable d'accéder à des informations beaucoup plus disposées normalement aux agents JMX. Voici une liste de fonctionnalités disponibles via la sonde Lambda: strong> p>
sur le problème réel: l'analyse XML peut être une mémoire très en mémoire lors de l'utilisation d'un analyseur à base de DOM. Pensez à utiliser un SAX ou Parser binaire XML ( VTD-XML A> est une API Java basée sur cela). P>
En réalité, si la cartographie XML-> JSON est pure 1: 1, vous pouvez également envisager de simplement lire le XML et écrire la ligne JSON REALTime par ligne à l'aide d'une petite pile. P>
Retour à la question: Je suggère d'utiliser VisualvM pour cela. Vous pouvez trouver ici Article de blog Comment obtenir le fonctionnement avec Tomcat. P>
https://github.com/mchr3k/org.inmemprofiler/wiki ( http://mchr3k.github.io/org.inmemprofiler/ ) P >
InMeMeProfiler peut être utilisé pour identifier quels objets sont collectés après une période très courte. p>