繁体   English   中英

Apache Camel内存不足异常

[英]Apache Camel out of memory exception

我有一个.csv文件,总大小为25Gb 我正在尝试逐行读取它,但是我一直遇到OutOfMemoryError: Java heap space ,我不知道为什么。 搜寻了一段时间后,我想出了以下代码

from("file:/home/justin/data/?fileName=in.csv&noop=true")//.streamCaching()
    .split().tokenize("\n", 10000000).streaming()
    .unmarshal(csv)
    .process(new CsvParserProcess())
    .marshal(csv)
    .to("file:/home/justin/data/?fileName=out.csv").log("Finished Transformation").end();

在运行5秒钟后,当我遇到OutOfMemoryError

我的直觉会告诉我“哦,当您达到接近完全的内存饱和时,请清除旧的未使用的内容”,但是我不确定如何在ApacheCamel的上下文中执行此操作(或者实际上是在Java中手动进行此操作,我一直从C)

我的另一种解决方案是非常昂贵的蛮力选择,即仅将文件(?)从骆驼的流终结点一次一行地传输到流中,哪个可行? 我只是不想坐在那里等它完成。

from("stream:file?fileName=/home/justin/data/in.csv")
    .streamCaching().split().tokenize("\n")
    .unmarshal(csv)
    .process(new CsvParserProcess())
    .marshal(csv)
    .to("file:/home/justin/data/?fileName=out.csv&fileExist=Append").log("done").end();

有谁对我如何避免MemoryError有任何想法?

编辑:我.streaming()下文件标记后,我的“改进”代码具有.streaming() 但是它仍然导致相同的错误:(

也许在我拔掉头发(去到我永远都看不见的互联网上的地方)之前,我应该对ockham的剃须刀做一些研究。……事实证明,我不能像我最初想象的那样好我创建的大小为10000000的缓冲区实际上应该是1000000 ....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM