Weblogic FileStore中的OutOfMemoryError

时间:2014-02-25 21:34:52

标签: java file-io jms weblogic out-of-memory

我正在尝试将我的应用程序强调为Weblogic11g,并且我在队列中发送了许多JMS消息。

但是,FileStore崩溃的OOE大约是20K消息,最大大小为647,169 ko

Exception in thread "Thread-13" java.lang.OutOfMemoryError: Java heap space
            at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
            at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
            at weblogic.store.io.file.StoreFile.expand(StoreFile.java:324)
            at weblogic.store.io.file.Heap.reserveSpace(Heap.java:305)
            at weblogic.store.io.file.Heap.multiWrite(Heap.java:438)
            at weblogic.store.io.file.FileStoreIO.flush(FileStoreIO.java:497)
            at weblogic.store.internal.PersistentStoreImpl.run(PersistentStoreImpl.java:638)
            at weblogic.store.internal.PersistentStoreImpl$2.run(PersistentStoreImpl.java:383)

日志文件的几行

  

2014年2月25日下午7:53:19 CET警告JTA BEA-110484 JTA健康状况已从HEALTH_OK更改为HEALTH_WARN,原因代码为:资源WLStore_MyFS_stores-Node1-file-jms声明为不健康。

     

2014年2月25日下午7:53:19 CET警告JTA BEA-110030 XA资源[WLStore_MyFS_stores-Node1-file-jms]在过去的120秒内没有响应。

     

2014年2月25日下午7:53:19 CET警告JTA BEA-110405资源WLStore_MyFS_stores-Node1-file-jms未分配给任何这些服务器:Node1

     

2014年2月25日下午7:54:19 CET警告JTA BEA-110486交易BEA1-5DA4B1F8A57C83AEDB1B无法完成提交处理,因为资源[WLStore_MyFS_stores-Node1-file-jms]不可用。除非所有资源都承认提交决定,否则交易将在3,420秒后放弃。

是否可以增加此FileStore的大小?

2 个答案:

答案 0 :(得分:4)

向WLS发送消息时,它会将消息+标头保留在内存中,直到消息被消耗为止。 如果你的消息生成速度比消息的消耗速度快,那么你最终会达到一个OOM。

你可以采取一些措施来避免获得OOM

1)确保您拥有足够的消费者消息,并且他们能够快速消费消息。

2)默认情况下,当JMS消息的内存消耗约为整个堆的1/3时,会触发JMS分页功能。如果需要,您可以调整服务器以更早地触发分页。分页的作用是,它将每个消息的头部分留在内存中,并且正文移动到分页文件,从而释放一些内存。对于简单计算,JMS头只会占用大约1k的内存。 - 注意待处理的消息将在内存中同时包含标题和正文。

3)当然,增加托管JMS服务器的托管服务器的JVM大小将直接使您能够在内存中保留更多消息。

答案 1 :(得分:0)

尝试通过在Server Start参数或启动脚本中为-Xmx参数提供更大的值来增加受管服务器的堆分配。

有关详细信息,请参阅How to increase memory in weblogic

相关问题