问题描述
我正在使用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");
解决方法
Java是一种垃圾收集语言,因此,如果有足够的可用内存,垃圾收集器将不会太急于清理未使用的内存。仅当垃圾收集器运行时,内存才会被释放。
您可以使用-Xmx java选项确定应用程序所需的内存下限,如果希望证据证明骆驼通过流传输文件,则最好使其小于要发送的文件大小,并且不会同时将整个文件内容加载到内存中。
示例:
java -Xmx100m -jar YourJarFile.jar