Domanda

Sto usando una nuova installazione di Glassfish con pochissime personalizzazioni.

Ho un Message Driven Bean (ObjectUpdateMDB) che ascolta un argomento, quindi aggiorna l'oggetto che riceve in un database. Ci sono molti oggetti in fase di aggiornamento. Dopo un po 'di corsa ottengo questa eccezione:

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

Sembra che sia un problema con Heap Space. Di cosa ho bisogno per regolare lo spazio heap? L'App Server stesso o il broker? Come posso farlo?

È stato utile?

Altri suggerimenti

Ho usato i seguenti comandi asadmin per ordinare il problema su 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'

È una variazione del suggerimento di Michael Myers. L'uso dei comandi asadmin rende la modifica facilmente ripetibile.

Inoltre sono passato al nuovo collettore G1 che è molto meglio del normale collettore. Aiuta anche con Eclipse ;-)

Nota che la sintassi è per TakeCommand su Windows. Se usi una combinazione diversa di shell e sistema operativo potresti aver bisogno di caratteri di escape diversi (ad esempio segni di spunta dello stretto invece di backtick per la maggior parte delle shell unix).

Se confondi la tua configurazione con i comandi * -jvm-options , puoi ripararla con il file domain.xml .

Ho un post sul mio blog su Sintonizzazione VM e sto indicando i lettori alla Tuning Java Libro bianco .

Ad ogni modo, per ottenere una risposta rapida dovresti probabilmente esaminare un paio di impostazioni di base:

-Xms: dimensione iniziale dell'heap

-Xmx: dimensione massima dell'heap

Per ottenere una breve descrizione di questi basta eseguire: java -X.

./ alex

Non so se questo sia correlato, ma abbiamo ottenuto alcune strane eccezioni quando si utilizzano Transazioni XA che hanno comportato eccezioni CORBA. Il motivo era il driver MySQL e siamo passati all'ultimo driver MySQL JDBC (5.1.7) e poi questi problemi XA sono scomparsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top