Je suis un débutant dans les applications de réglage de la performance et je tiens à déterminer le fonctionnement de la GC afin de poser probablement la même question un millionième temps!
Le problème est que 2 à 3 semaines, quelque part, mon application Web a commencé à se planter de temps en temps. puis. En regardant les bûches, il a été déduit que sa crash due à des erreurs OOM: p> et p> ultérieurement, je Commencé à enregistrer des journaux GC et a constaté que initialement le démarrage du serveur, GC fonctionne bien: P> java -Dprogram.name=run.sh -server -Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m -verbose:gc -Xloggc:/data1/logs/jboss/GC.log -XX:+HeapDumpOnOutOfMemoryError -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false -Djava.net.preferIPv4Stack=true -Djava.library.path=/usr/local/java/jboss-4.2.2.GA/bin/native -Djava.endorsed.dirs=/usr/local/java/jboss-4.2.2.GA/lib/endorsed -classpath /usr/local/java/jboss-4.2.2.GA/bin/run.jar:/usr/local/java/jdk1.6.0_06/lib/tools.jar org.jboss.Main -c default -b <IP_ADDRESS> -Djboss.messaging.ServerPeerID=1
3 Réponses :
Eclipse comprend un excellent outil appelé Analyseur de mémoire. Il peut analyser exactement ces décharges de tas que vous générez sur OOM. Il attire de très bons graphiques pour vous aider à réduire l'emplacement de la consommation de votre mémoire: votre application, JBoss, d'autres parties de votre configuration - jusqu'à un niveau très fine. p>
Si vous collez sa sortie ici, nous pourrions continuer à enquêter sur votre problème. P>
Merci pour la réponse rapide. Je vais installer des sorties de tapis et post. Entre-temps, affichez également une décharge de tas de JBoss, tandis que les GC complètes se produisaient.
D'accord, le tapis est incroyablement utile si vous avez un dépotoir de tas.
Somewhere your code is creating temporary objects in an memory- less environment. Please look at your code (HibernateCommentaryDao.java) it is something with n+1 fetch Excessive GC Time and OutOfMemoryError The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line
Merci d'avoir examiné cela. Ajout du code en question comme vous l'avez demandé (le code désolé trop longtemps, ne pouviez pas publier ici!)
en cours d'exécution avec 4 Go de RAM et en utilisant D'autre part, il me semble que votre requête retourne trop de résultats Soit en raison des jointures ou de la limite Vous pouvez commencer par prendre un instantané de tas au milieu de GCS avec P> < Pré> xxx pré> puis à l'aide de analyseur de mémoire . p> p> -xmx1024m code> (quantité maximale de java tas de 1024 m) pourrait ne pas être intentionnel.
null code>, qui se transforme en une liste surdimensionnée. p>
Merci pour l'information, vérifiera cette sortie et la mise à jour. En outre, je ne sais pas ce que vous vouliez dire par en cours d'exécution avec 4 Go de RAM et à l'aide de -xmx1024m (quantité maximale de 024m Java 1024m) pourrait ne pas être intentionnel code>. J'ai intentionnellement ajouté les drapeaux -xms et -xmx pour exécuter JBoss.
@Sumit: Je voulais dire que - si vous n'exécutez rien d'autre sur ce serveur - vous pouvez attribuer plus de mémoire à la JVM, car les autres 3 Go restera assis là-bas de ne rien faire pratiquement rien. Si le serveur exécute d'autres choses, alors c'est parfaitement bien.
Merci pour la clarification. Oui, le serveur a d'autres applications qui l'utilisent !!
Le serveur vient de se redémarrer alors GC Retour à la normale pour le moment (GC complet survenant rarement). J'ai pris un instantané de tas en utilisant votre commande et j'ai trouvé des objets potentiellement problématiques. Prendra un autre instantané lorsque des GC complètes réguliers se produisent pour confirmer ces objets et posteront le code des suggestions de solution.
Problème identifié. Ouvrira une question séparée demandant la solution. Marquant cette réponse comme la bonne réponse en tant que MAT a aidé beaucoup à identifier le problème. Merci tout le monde!
+1 pour une question bien écrite.
@Sumit au lieu des journaux GC, publiez le code hibernate.
Cela ne résoudra probablement pas votre problème, mais votre JDK est dans Dire B> besoin d'une mise à niveau!
@Sumit: Veuillez joindre le rapport de bogues bugs.mysql.com/bug.php? id = 36565
@Suresh: Pourquoi pensez-vous que cela est lié? Le rapport de bogue concerne un problème qui se produit lors du déchargement / de rechargement des applications à Tomcat. Je ne vois aucune mention de cela se produire dans cette question.
@ Jochim: Je cherchais la vidée thread "MySQL Déclaration de la minuterie d'annulation en attente (sur moniteur d'objet)".
@Suresh: Eh bien, le fait que ce fil est en cours d'exécution n'est pas un signe qu'il a vu ce bogue en action. En fait, c'est normal.
@ Jochim: Ok merci pour l'info.
@SURSH @JOCHIM: Il existe 2 WebApps servies par cet exemple particulier de JBoss (interne WebApp & jorum) et tous les déploiements sont gérées par une fermeture / redémarrage correcte du serveur JBoss. Ainsi, il ne devrait pas y avoir de déchargement / rechargement sale de modules Web, sauf étant automatiquement effectué par JBoss (y est-il en est !!).