Apache骆驼SFTP文件上传消耗大量堆内存

问题描述

我正在使用apache骆驼将文件从本地计算机发送到sftp服务器。我正在尝试使用的文件大小为100MB,并且我观察到cpu使用率突然飙升并消耗了大量堆内存,您能帮我如何改善这里的性能文件内容是否正在读入内存?如果是的话,如何避免这种情况 因为我不想处理文件中的任何内容,所以我只是在使用该库来推送到服务器。
这是我配置路线的方式:

from("file://tmp?delete=true&localworkdirectory=/tmp&antInclude=*.csv&readLock=changed&readLockTimeout=70000&readLockCheckInterval=1000")
        .onException(Exception.class)
        .log("something went wrong")
        .end()

        .onCompletion()
        .log("file successfully delivered ${file:name}")
        .end()

        .log("processing file ${file:name}")
        .to("sftp://127.0.0.1:22/test/in?jschLoggingLevel=INFO&password=xxxxxx&useUserKNownHostsFile=false&username=test"); 

jconsole output

解决方法

Java是一种垃圾收集语言,因此,如果有足够的可用内存,垃圾收集器将不会太急于清理未使用的内存。仅当垃圾收集器运行时,内存才会被释放。

您可以使用-Xmx java选项确定应用程序所需的内存下限,如果希望证据证明骆驼通过流传输文件,则最好使其小于要发送的文件大小,并且不会同时将整个文件内容加载到内存中。

示例:

java -Xmx100m -jar YourJarFile.jar