我在下面的代码中遇到了OOM问题
from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192")
.unmarshal().string("UTF-8")
在目录位置转储的xml文件很大(有时是1G)。
我也尝试过添加自定义处理器 - 但没有成功,
from("file://" + getDumpDirLocation() + "?maxMessagesPerPoll=1&bufferSize=8192")
.process(this.getRemoveInvalidXmlCharacterProcessor())
有没有办法避免这种内存不足异常?
所以基本上,交换机中的exchange.getIn()。getBody(String.class)会抛出OOM,因为考虑到转储的XML文件的大小,对象结构很大。
感谢。
答案 0 :(得分:2)
将1GB的文件读入内存真的不是一个好主意。而是使用流式传输以“块”方式读取文件。
如果你想处理大型XML文件然后阅读其中的一些文章,你可以在这里找到:http://camel.apache.org/articles关于拆分大型xml文件。只需在该页面上搜索xml,您就可以找到这些链接。
答案 1 :(得分:1)
这是一个Java内存异常。我认为与骆驼没什么关系。分离出自定义处理器不会有任何区别。
您必须增加JVM的运行时内存。 如果您使用的是Eclipse,请在运行配置下将-Xmx2048M设置为VM参数,以用于您要运行的特定应用程序。
如果在任何其他环境中,您可以进行简单的搜索,以了解如何增加java heapsize,这应该可以解决问题。