web-dev-qa-db-fra.com

Problème de fuite de mémoire de Wildfly 10

J'utilise la version finale de wildfly 10.0.0. Je reçois Java.lang.OutOfMemoryError: GC overhead limit exceeded error chaque fois que je annule/déploie des modules 9 à 10 fois, l'utilisation de la mémoire de wildfly continue d'augmenter lentement et ne diminue jamais et cela donne encore Java.lang.OutOfMemoryError: GC overhead limit exceeded error.

Wildfly ne libère pas la mémoire après le non-déploiement de l'application et continue d'augmenter au fur et à mesure du déploiement, ce qui entraîne une surcharge du GC

Plus tôt, lorsque j'utilisais la version Wildfly 9, cela n'a pas posé ce problème.

J'ai essayé le correctif indiqué dans le lien ci-dessous en remplaçant les modules core, servlet et websocket par la dernière version mais cela n'a pas fonctionné pour moi.

https://developer.jboss.org/message/959286

Quelqu'un peut-il me dire comment résoudre ce problème?.

16
kirti

Vous devez augmenter votre mémoire de tas. Pour ça

Éditer bin/standalone.conf fichier de configuration, recherchez la première occurrence de Java_OPTS.

Modifiez ensuite le -Xmx option selon vos besoins.

Si vous utilisez Java 8, alors

Changement:

Java_OPTS=”-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true”

À:

Java_OPTS=”-Xms64m -Xmx2G -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=2G -Djava.net.preferIPv4Stack=true”

Lien de ressource:

WildFly 10 - Java.lang.OutOfMemoryError: espace de métadonnées

MISE À JOUR: Classes non déchargées après undéploiement

Martin Kouba a déclaré ci-dessous

  1. undeploy ne signifie pas nécessairement un déchargement de classe - cela dépend des paramètres JVM (-XX: MaxMetaspaceSize et ses amis pour Java8)
  2. J'ai vérifié qu'après 50 cycles de déploiement/annulation du déploiement du reproducteur connecté (et en utilisant -XX: MaxMetaspaceSize = 128m):

pour WildFly 10.0.0.Final "Java.lang.OutOfMemoryError: Metaspace" se produit

pour WildFly 10.1.0-SNAPSHOT (correction pour WFLY-6347 fusionné) aucune erreur de MOO ne se produit (la métaspace est une récupération de place)

Après avoir examiné le vidage de tas, j'ai identifié le org.jboss.el.cache.BeanPropertiesCache comme cause première. Dans ce cas, il conserve une référence dure au person.joey.test.TestClientBean class, bloquant ainsi efficacement le ModuleClassLoader pertinent du GC.

Les valeurs d'énumération sont traitées de la même manière que les constantes statiques - c'est-à-dire qu'elles ne sont pas récupérées à moins que le chargeur de classe de la classe propriétaire ne le soit.

C'est pourquoi person.joey.test.RequestType les valeurs restent en mémoire. OmniFaces amplifie uniquement l'impact - comme mentionné ci-dessus, il contient une référence à un BeanManager.

21
SkyWalker