2016-09-14 3 views
2

JVM hotspot logs processed and converted to CSV to plot graph which will show the time taken by different VM operationsmachine virtuelle Java gel se produit et les journaux de point chaud montre que « ParallelGCFailedAllocation », « Révoquer Bias » prend plus de temps

Nous sommes confrontés à un problème particulier dans notre application en cluster. Après l'exécution du système pendant un certain temps, l'application est soudainement gelée et n'a pu trouver aucune idée de ce qui cause cela. Après l'activation des journaux de points d'accès JVM, nous constatons que "ParallelGCFailedAllocation", "Revoke Bias" prend plus de temps. Se référer au graphique ci-joint qui est tracée en analysant les journaux de points chauds et convertis en CSV. Le graphique montre à un certain moment que "ParallelGCFailedAllocation", "Revoke Bias" est en train d'augmenter et prend environ 13 secondes, ce qui n'est pas normal. Nous essayons de trouver ce qui cause beaucoup de temps.

Quelqu'un at-il une idée sur la façon de déboguer un tel problème?

détails: Enviroment

32 core machine running in VMWare hypervisor. 
Heap Size: 12GB 
RHEL 7 with Open JDK 8 
+0

possible en double http://stackoverflow.com/questions/25039960/large-sync-value-for -parallelgcfailedallocation –

+0

@PeterLawrey a une bonne suggestion là-bas. Il serait utile d'en savoir un peu plus sur la nature de votre application. Que fait-il principalement? Tout énorme traitement de chaîne (charges utiles xml etc.) impliqué? – bashnesnos

+0

@bashnesnos Il s'agit d'une application d'entreprise déployée dans un conteneur JBoss avec un environnement en cluster. L'application a beaucoup de composants qui implique la conversion d'entrée xml dans un format différent. Les nœuds du cluster sont également communiqués à l'aide de JBoss Remoting. JMS est également en place pour la communication asynchrone entre les nœuds. –

Répondre

0

wow, vous avez environ 2800 threads dans votre application, son trop! Aussi votre tas est trop énorme, 4 Go en jeune génération et 8 Go en ancienne génération. Qu'attendez-vous dans ce cas? A partir de la sortie PrintSafepointStatistics, vous n'avez aucun problème avec la synchronisation safepoint, en réalité l'opération vm prend tout le temps. Vous pouvez désactiver le verrouillage biaisé -XX:-UseBiasedLocking et utiliser les gc simultanés (CMS \ G1) au lieu de gc parallèle, cela vous aidera peut-être à réduire un peu les pauses, mais le problème principal est une mauvaise configuration et peut-être du code/design.

  • Utiliser des pools de threads de taille limitée, 2800 ~ fils est trop
  • 12 Go est énorme tas, aussi jeune génération devrait être pas si grand. Le profil de votre application (JFR, yourkit, jprofiler, visualvm) peut vous aider à trouver des hotspots d'allocation.
  • aussi Eclipse MAT peut vous aider à analyser tas
  • si vous voulez tracer revokeBias, ajouter -XX:+TraceBiasedLocking