-1

我在下面的代码中面临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 文件的大小,对象结构很大。

谢谢。

4

2 回答 2

2

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

如果您想处理大型 XML 文件,请阅读其中一些文章,您可以在此处找到:http: //camel.apache.org/articles关于拆分大型 xml 文件。只需在该页面上搜索 xml,即可找到链接。

于 2013-04-18T12:23:52.283 回答
1

这是 Java 内存异常。我认为与骆驼无关。分离到定制处理器不会有任何区别。

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

如果在任何其他环境中,您可以进行简单搜索以了解如何增加 java heapsize 并且应该可以解决问题。

于 2013-04-18T11:47:11.473 回答