Pregunta

Estoy usando una instalación nueva de Glassfish con muy pocas personalizaciones.

Tengo un Bean controlado por mensaje (ObjectUpdateMDB) que escucha un tema y luego actualiza el objeto que recibe en una base de datos. Hay muchos objetos que se están actualizando. Después de un tiempo de ejecución me sale esta excepción:

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

Parece que es un problema con Heap Space. ¿Para qué necesito ajustar el espacio de almacenamiento dinámico? ¿El propio servidor de aplicaciones o el broker? ¿Cómo hago esto?

¿Fue útil?

Otros consejos

He utilizado los siguientes comandos asadmin para solucionar el problema en 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'

Es una variación de la sugerencia de Michael Myers. El uso de los comandos asadmin hace que el cambio sea fácilmente repetible.

También cambié al nuevo colector G1, que es mucho mejor que el colector normal. También ayuda con Eclipse ;-)

Tenga en cuenta que la sintaxis es para TakeCommand en Windows. Si usa una combinación diferente de shell y sistema operativo, es posible que necesite diferentes caracteres de escape (i.E. strait ticks en lugar de backticks para la mayoría de shells de Unix).

Si arruinas tu configuración con los comandos * -jvm-options , entonces puedes corregirlo con el archivo domain.xml .

Tengo una publicación en mi blog sobre VM Tuning y estoy apuntando a los lectores a Ajuste de Java Libro Blanco .

De todos modos, para obtener una respuesta rápida, probablemente debas buscar un par de configuraciones básicas:

-Xms: tamaño de pila inicial

-Xmx: tamaño máximo de pila

Para obtener una descripción rápida de estos solo ejecute: java -X.

./alex

No sé si esto está relacionado, pero obtuvimos algunas excepciones extrañas cuando usamos Transacciones XA que resultaron en excepciones CORBA. El motivo fue el controlador MySQL y actualizamos al último controlador JDBC de MySQL (5.1.7) y luego estos problemas de XA desaparecieron.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top