Question

J'utilise une nouvelle installation Glassfish avec très peu de personnalisations.

J'ai un bean géré par message (ObjectUpdateMDB) qui écoute un sujet, puis met à jour l'objet qu'il reçoit dans une base de données. Il y a beaucoup d'objets en cours de mise à jour. Après un certain temps, je reçois cette exception:

SEVERE: JTS5031: Exception [org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe] on Resource [rollback] operation.
SEVERE: MDB00049: Message-driven bean [Persistence:ObjectUpdateMDB]: Exception in postinvoke : [javax.transaction.SystemException: org.omg.CORBA.INTERNAL: JTS5031: Exception [org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe] on Resource [rollback] operation.  vmcid: 0x0  minor code: 0  completed: No]
SEVERE: javax.transaction.SystemException
javax.transaction.SystemException: org.omg.CORBA.INTERNAL: JTS5031: Exception [org.omg.CORBA.INTERNAL:   vmcid: 0x0  minor code: 0 completed: Maybe] on Resource [rollback] operation.  vmcid: 0x0  minor code: 0  completed: No
    at com.sun.jts.jta.TransactionManagerImpl.rollback(TransactionManagerImpl.java:350)
    at com.sun.enterprise.distributedtx.J2EETransactionManagerImpl.rollback(J2EETransactionManagerImpl.java:1144)
    at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.rollback(J2EETransactionManagerOpt.java:426)
    at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3767)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3571)
    at com.sun.ejb.containers.MessageBeanContainer.afterMessageDeliveryInternal(MessageBeanContainer.java:1226)
    at com.sun.ejb.containers.MessageBeanContainer.afterMessageDelivery(MessageBeanContainer.java:1197)
    at com.sun.ejb.containers.MessageBeanListenerImpl.afterMessageDelivery(MessageBeanListenerImpl.java:79)
    at com.sun.enterprise.connectors.inflow.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:139)
    at $Proxy98.afterDelivery(Unknown Source)
    at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:324)
    at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:76)
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)

INFO: MDB00037: [Persistence:ObjectUpdateMDB]: Message-driven bean invocation exception: [java.lang.OutOfMemoryError: Java heap space]
INFO: java.lang.OutOfMemoryError
java.lang.OutOfMemoryError: Java heap space

On dirait que c'est un problème avec Heap Space. De quoi ai-je besoin pour ajuster l'espace du tas? Le serveur d'applications lui-même ou le courtier? Comment je fais ça?

Était-ce utile?

Autres conseils

J'ai utilisé les commandes asadmin suivantes pour résoudre le problème sur Glassfish 3.1:

asadmin create-jvm-options --target server-config -- '-XX\:+UnlockExperimentalVMOptions'
asadmin create-jvm-options --target server-config -- '-XX\:+UseG1GC'
asadmin delete-jvm-options --target server-config -- '-Xmx512m'
asadmin create-jvm-options --target server-config -- '-Xmx1024m'
asadmin delete-jvm-options --target server-config -- '-XX\:MaxPermSize=192m'
asadmin create-jvm-options --target server-config -- '-XX\:MaxPermSize=256m'

asadmin create-jvm-options --target default-config -- '-XX\:+UnlockExperimentalVMOptions'
asadmin create-jvm-options --target default-config -- '-XX\:+UseG1GC'
asadmin delete-jvm-options --target default-config -- '-Xmx512m'
asadmin create-jvm-options --target default-config -- '-Xmx1024m'
asadmin delete-jvm-options --target default-config -- '-XX\:MaxPermSize=192m'
asadmin create-jvm-options --target default-config -- '-XX\:MaxPermSize=256m'

C’est une variation de l’allusion de Michael Myers. L'utilisation des commandes asadmin permet de répéter facilement les modifications.

De plus, je suis passé au nouveau collecteur G1, qui est bien meilleur que le collecteur normal. Aide également avec Eclipse ;-)

Notez que la syntaxe est pour TakeCommand sous Windows. Si vous utilisez une combinaison différente de shell et de système d'exploitation, vous aurez peut-être besoin de caractères d'échappement différents (i.E. strait ticks au lieu de backticks pour la plupart des shells Unix).

Si vous dérangez votre configuration avec les commandes * - jvm-options , vous pouvez y remédier avec le fichier domain.xml .

J'ai un post sur mon blog à propos de Optimisation de la machine virtuelle et les lecteurs pointés vers le Optimisation Java Livre blanc .

Quoi qu'il en soit, pour obtenir une réponse rapide, vous devriez probablement examiner quelques paramètres de base:

-Xms: taille initiale du segment de mémoire

-Xmx: taille maximale du segment de mémoire

Pour obtenir une description rapide de ces opérations, exécutez simplement: java -X.

./ alex

Je ne sais pas si cela est lié, mais nous avons eu quelques exceptions étranges lors de l'utilisation de XA Transactions, ce qui a entraîné des exceptions CORBA. La raison en était le pilote MySQL et nous avons mis à jour le dernier pilote MySQL JDBC (5.1.7), puis ces problèmes XA ont disparu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top