glassfish 中的 Java 堆空间错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/612634/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java Heap Space error in glassfish
提问by mainstringargs
I am using a fresh Glassfish install with very little customizations.
我正在使用一个新的 Glassfish 安装,几乎没有定制。
I have a Message Driven Bean (ObjectUpdateMDB) that listens to a topic, then updates the object it receives in a database. There are a lot of objects being updated. After a while of running I get this exception:
我有一个消息驱动 Bean (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
Looks like it is an issue with Heap Space. What do I need to adjust the heap space for? The App Server itself or the Broker? How do I do this?
看起来这是堆空间的问题。我需要调整堆空间做什么?App Server 本身还是 Broker?我该怎么做呢?
采纳答案by OscarRyz
You need to assign more RAM to your Glassfish installation.
您需要为 Glassfish 安装分配更多 RAM。
See http://spaquet.blogspot.com/2006/07/liferay-glassfish-part-ii-configuring.html
见http://spaquet.blogspot.com/2006/07/liferay-glassfish-part-ii-configuring.html
回答by alexpopescu
I have a post on my blog about VM tuningand I'm pointing readers to the Java Tuning White Paper.
我在我的博客上发表了一篇关于VM 调优的文章,我正在将读者引向Java 调优白皮书。
Anyways, to get you a quick answer you should probably look into a couple of basic settings:
无论如何,为了让您快速得到答案,您可能应该查看几个基本设置:
-Xms: initial heap size
-Xms:初始堆大小
-Xmx: maximum heap size
-Xmx:最大堆大小
To get a quick descriptions for these just run: java -X.
要获得这些的快速描述,只需运行:java -X。
./alex
./亚历克斯
回答by tronda
I don't know if this is related, but we got some strange exceptions when using XA Transactions which resulted in CORBA exceptions. The reason was the MySQL driver and we upgraded to the latest MySQL JDBC driver (5.1.7) and then these XA problems disappeared.
我不知道这是否相关,但是我们在使用 XA 事务时遇到了一些奇怪的异常,这导致了 CORBA 异常。原因是 MySQL 驱动程序,我们升级到最新的 MySQL JDBC 驱动程序(5.1.7),然后这些 XA 问题就消失了。
回答by Martin
I have used the following asadmin
commands to sort the problem on Glassfish 3.1:
我使用以下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'
It is a variation on Michael Myers hint. Using asadmin
commands makes the change easily repeatable.
这是迈克尔迈尔斯暗示的变体。使用asadmin
命令可以轻松地重复更改。
Also I switched to the new G1 collector which is a lot better then the normal collector. Helps with Eclipse as well ;-)
我也切换到新的 G1 收集器,它比普通收集器好得多。也有助于 Eclipse ;-)
Note that syntax is for TakeCommand on Windows. If you use a different combination of shell and OS you might need different escape characters (i.E. strait ticks instead of backticks for most unix shells).
请注意,语法适用于 Windows 上的 TakeCommand。如果您使用不同的 shell 和 OS 组合,您可能需要不同的转义字符(对于大多数 unix shell,即 strait ticks 而不是 backticks)。
If you mess your setup up with the *-jvm-options
commands then you can fix it with domain.xml
file.
如果你用*-jvm-options
命令搞砸了你的设置,那么你可以用domain.xml
文件来修复它。