Ошибка кучи Java в Glassfish - PullRequest
9 голосов
/ 05 марта 2009

Я использую свежую установку Glassfish с очень небольшими изменениями.

У меня есть компонент, управляемый сообщениями (ObjectUpdateMDB), который прослушивает тему, а затем обновляет полученный объект в базе данных. Есть много объектов, которые обновляются. Через некоторое время работы я получаю это исключение:

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

Похоже, это проблема кучи пространства. Для чего мне нужно настроить пространство кучи? Сам сервер приложений или брокер? Как мне это сделать?

Ответы [ 4 ]

9 голосов
/ 05 марта 2009

Вам необходимо выделить больше оперативной памяти для вашей установки Glassfish.

См. http://spaquet.blogspot.com/2006/07/liferay-glassfish-part-ii-configuring.html

и http://docs.sun.com/app/docs/doc/820-4495/gepzd?a=view.

7 голосов
/ 11 февраля 2011

Я использовал следующие команды asadmin для решения проблемы на 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'

Это вариант подсказки Майкла Майерса. Использование asadmin команд позволяет легко повторить изменение.

Также я перешел на новый коллектор G1, который намного лучше обычного коллектора. Помогает и с Eclipse; -)

Обратите внимание, что синтаксис для TakeCommand в Windows. Если вы используете другую комбинацию оболочки и ОС, вам могут потребоваться другие escape-символы (т. Е. Для большинства оболочек unix вместо прямых галочек вместо обратных галочек).

Если вы испортили настройки с помощью команд *-jvm-options, вы можете исправить это с помощью файла domain.xml.

1 голос
/ 05 марта 2009

В моем блоге есть сообщение о ВМ-настройке , и я указываю читателям на Java Tuning White Paper .

В любом случае, чтобы получить быстрый ответ, вам, вероятно, стоит взглянуть на пару основных настроек:

-Xms: начальный размер кучи

-Xmx: максимальный размер кучи

Чтобы получить быстрые описания для них, просто запустите: java -X.

. / Alex

0 голосов
/ 07 марта 2009

Я не знаю, связано ли это с этим, но мы получили некоторые странные исключения при использовании транзакций XA, которые привели к исключениям CORBA. Причиной был драйвер MySQL, и мы обновили драйвер до последней версии MySQL JDBC (5.1.7), а затем эти проблемы XA исчезли.

...