简体   繁体   English

Java glassfish 中的堆空间错误

[英]Java Heap Space error in glassfish

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.我有一个消息驱动 Bean (ObjectUpdateMDB),它侦听一个主题,然后更新它在数据库中接收到的 object。 There are a lot of objects being updated.有很多对象正在更新。 After a while of running I get this exception:运行一段时间后,我得到了这个异常:

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?我该怎么做呢?

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.我还换了新的 G1 收集器,它比普通收集器好很多。 Helps with Eclipse as well;-)对 Eclipse 也有帮助;-)

Note that syntax is for TakeCommand on Windows.请注意,语法适用于 Windows 上的 TakeCommand。 If you use a different combination of shell and OS you might need different escape characters (iE strait ticks instead of backticks for most unix shells).如果您使用 shell 和操作系统的不同组合,您可能需要不同的转义字符(对于大多数 unix 外壳,iE 海峡刻度而不是反引号)。

If you mess your setup up with the *-jvm-options commands then you can fix it with domain.xml file.如果您使用*-jvm-options命令弄乱了设置,则可以使用domain.xml文件修复它。

I have a post on my blog about VM tuning and 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 ./亚历克斯

I don't know if this is related, but we got some strange exceptions when using XA Transactions which resulted in CORBA exceptions.我不知道这是否相关,但我们在使用 XA 事务时遇到了一些奇怪的异常,这会导致 CORBA 异常。 The reason was the MySQL driver and we upgraded to the latest MySQL JDBC driver (5.1.7) and then these XA problems disappeared.原因是 MySQL 驱动程序,我们升级到最新的 MySQL JDBC 驱动程序(5.1.7)然后这些 XA 问题消失了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM