2013-04-18 113 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