glassfish中的Java堆空间错误
问题描述:
我正在使用一个新鲜的Glassfish安装,只有很少的自定义设置。glassfish中的Java堆空间错误
我有驱动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
看起来这是一个堆空间的问题。我需要调整堆空间的大小?应用服务器本身还是经纪人?我该怎么做呢?
答
我在我的博客上有一篇关于VM tuning的文章,我正在将读者指向Java Tuning White Paper。
不管怎么说,让你快速的答案,你可能应该考虑几个基本设置:
-Xms:初始堆大小
-Xmx:最大堆大小
要获得这些只是运行的快速描述:java -X。
./alex
答
我不知道这是相关的,但我们用这导致CORBA异常XA事务时,得到了一些奇怪的例外。原因是MySQL驱动程序,我们升级到最新的MySQL JDBC驱动程序(5.1.7),然后这些XA问题消失了。
答
我用下面的命令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上。如果您使用shell和OS的不同组合,则可能需要不同的转义字符(i.E. strait ticks,而不是大多数unix shell的反引号)。
如果你用*-jvm-options
命令搞乱你的设置,那么你可以用domain.xml
文件修复它。
是否有VMArg这样做?我将如何做到这一点? – systemoutprintln 2009-03-04 22:03:19