Ошибка пространства кучи Java в glassfish
-
03-07-2019 - |
Вопрос
Я использую свежую установку 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
Похоже, это проблема с пространством в куче.Для чего мне нужно настроить пространство кучи?Сам Сервер приложений или Брокер?Как мне это сделать?
Решение
Вам нужно выделить больше оперативной памяти для вашей установки Glassfish. Р>
См. http://spaquet.blogspot.com/2006/07/liferay-glassfish-part-ii-configuring.html
Другие советы
Я использовал следующие команды 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
.
У меня в блоге есть пост о Настройка виртуальной машины и я указываю читателям на Технический документ по настройке Java.
В любом случае, чтобы получить быстрый ответ, вам, вероятно, следует ознакомиться с парой основных настроек:
-Xms:начальный размер кучи
-Xmx:максимальный размер кучи
Чтобы получить краткое описание для них, просто запустите:java -X.
./алекс
Я не знаю, связано ли это с этим, но мы получили странные исключения при использовании транзакций XA, которые привели к исключениям CORBA. Причина была в драйвере MySQL, и мы обновили его до последней версии драйвера JDBC MySQL (5.1.7), а затем эти проблемы XA исчезли.