erro de Java Heap Space in GlassFish
-
03-07-2019 - |
Pergunta
Eu estou usando um novo Glassfish instalar com muito pouco personalizações.
Eu tenho um Message Driven Bean (ObjectUpdateMDB) que ouve um tópico, em seguida, atualiza o objeto que recebe em um banco de dados. Há uma grande quantidade de objetos que está sendo atualizado. Depois de um tempo de correr eu recebo esta exceção:
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 ele é um problema com Heap espaço. O que eu preciso para ajustar o espaço de pilha para? O próprio App Server ou do corretor? Como posso fazer isso?
Solução
Você precisa atribuir mais memória RAM para a instalação do Glassfish.
Veja http://spaquet.blogspot.com/2006/07/liferay-glassfish-part-ii-configuring.html
Outras dicas
Eu tenho usado os comandos seguinte asadmin
para resolver o problema no 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'
É uma variação sobre Michael Myers dica. Usando comandos asadmin
faz a mudança facilmente reproduzível.
Além disso eu mudei para o novo coletor de G1 que é muito melhor, em seguida, o coletor normal. Ajuda com Eclipse também; -)
Note que a sintaxe é para TakeCommand no Windows. Se você usar uma combinação diferente de shell e OS que você pode precisar de diferentes caracteres de escape (ou seja, carrapatos Estreito, em vez de acentos graves para a maioria dos shells UNIX).
Se você fracassar sua configuração com o *-jvm-options
comanda então você pode corrigi-lo com o arquivo domain.xml
.
Eu tenho um post no meu blog sobre VM sintonia e eu estou apontando leitores ao Java afinação Livro branco .
De qualquer forma, para que você obtenha uma resposta rápida, você provavelmente deve olhar para um par de ajustes básicos:
-Xms: tamanho inicial do heap
-Xmx: tamanho máximo de heap
Para obter um rápido descrições para estes apenas executar:. Java -X
./ alex
Eu não sei se isso está relacionado, mas temos algumas exceções estranhas ao usar transações XA que resultou em exceções CORBA. O motivo foi o driver MySQL e nós atualizado para o mais recente driver MySQL JDBC (5.1.7) e, em seguida, esses problemas XA desapareceu.