【问题标题】:java.lang.OutOfMemoryError when processing large pgp file处理大型 pgp 文件时出现 java.lang.OutOfMemoryError
【发布时间】:2013-12-20 00:29:40
【问题描述】:

我想使用 Camel 2.12.1 来解密一些可能很大的 pgp 文件。以下流程导致内存不足异常,调用堆栈显示 PGPDataFormat.unmarshal() 函数正在尝试构建一个 ByteArray,如果文件很大,该函数注定会失败。有没有办法在解组期间传递流?

我的路线:

from("file:///home/cps/camel/sftp-in?"
        + "include=.*&"  // find files using this pattern
        + "move=/home/cps/camel/sftp-archive&"  // after done adding records to queue, move file to archive
        + "delay=5000&"
        + "readLock=rename&" // readLock parameters prevent picking up file which is currently changing
        + "readLockCheckInterval=5000")
        .choice()
        .when(header(Exchange.FILE_NAME_ONLY).regex(".*pgp$|.*PGP$|.*gpg$|.*GPG$")).to("direct:decrypt")
        .otherwise()
        .to("file:///home/cps/camel/input");

from("direct:decrypt").unmarshal().pgp("file:///home/cps/.gnupg/secring.gpg", "developer", "set42now")
        .setHeader(Exchange.FILE_NAME).groovy("request.headers.get('CamelFileNameOnly').replace('.gpg', '')")
        .to("file:///home/cps/camel/input/")
        .to("log:done");

显示转换器尝试创建 ByteArray 的异常:

java.lang.OutOfMemoryError: Java heap space
    at org.apache.commons.io.output.ByteArrayOutputStream.needNewBuffer(ByteArrayOutputStream.java:128)
    at org.apache.commons.io.output.ByteArrayOutputStream.write(ByteArrayOutputStream.java:158)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1026)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
    at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:218)
    at org.apache.camel.converter.crypto.PGPDataFormat.unmarshal(PGPDataFormat.java:238)
    at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:65)

【问题讨论】:

    标签: apache-camel pgp


    【解决方案1】:

    尝试使用 2.13 或 2.12-SNAPSHOT,因为我们最近改进了数据格式和流式传输。所以在下一个版本中可能会更好。

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 2021-05-13
      • 2018-07-24
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2020-01-26
      相关资源
      最近更新 更多