2013-04-18 73 views
-1

的XML时我米面临OOM问题在下面的代码出的内存解编骆驼DSL

from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192") 
       .unmarshal().string("UTF-8") 

它获取的目录位置倾倒的xml文件是巨大的(有时1G)。

我也加入了自定义的处理器,试过 - 但没有成功,

from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192") 
.process(this.getRemoveInvalidXmlCharacterProcessor()) 

有什么办法避免这种内存溢出异常?

所以基本上考虑到转储的XML文件的大小,处理器中的exchange.getIn()。getBody(String.class)会抛出OOM,因为对象结构是巨大的。

谢谢。

回答

2

将1GB文件读入内存真的不是一个好主意。而是使用流式传输以“块”形式读取文件。

如果你要处理大的XML文件,然后看了一些这些文章,你可以在这里找到:http://camel.apache.org/articles约分裂大的XML文件。只需在该页面上搜索xml,即可找到链接。

1

这是一个Java内存异常。我认为骆驼没有任何关系。分离出定制处理器不会有什么区别。

您必须为增加运行内存JVM。 如果您使用的是Eclipse,请在运行配置下为您打算运行的特定应用程序设置-Xmx2048M作为VM参数。

如果在任何其他环境中,您可以通过简单搜索来找出如何增加java堆大小并解决问题。

+0

说使用-Xmx2048M,那么如果要处理的文件的大小超过2 GB,会发生什么情况。 – techuser