小编Joh*_*ann的帖子

Camel 保持 SFTP 连接打开导致内存泄漏

我一直在分析我们的一个应用程序中的内存泄漏,在分析 heapdump 时,我发现超过 98% 的内存被 Camels 占用SharedProducerServicePool。本质上,它保持了大量RemoteFileProducer其池中(约41K这个特殊的样本中)。他们都有一个SftpEndpoint.

以下是最终通过SFTP上传文件的Camel路由:

from("activemq:queue:transform")
        .routeId("TransformJson2Avro")
        .process(new FileListCountProcessor())
    .split(body()).streaming()
        .setHeader("CURRENT_FILE", simple("${body}"))
        .log("File to process: ${header.CURRENT_FILE}; Flags: "
                + Json2AvroTransformationFlags.FILE_AVRO_BACKUP + "=${header." + Json2AvroTransformationFlags.FILE_AVRO_BACKUP + "}, "
                + Json2AvroTransformationFlags.FILE_AVRO_SFTP + "=${header." + Json2AvroTransformationFlags.FILE_AVRO_SFTP + "}, "
                + Json2AvroTransformationFlags.FILE_JSON_BACKUP + "=${header." + Json2AvroTransformationFlags.FILE_JSON_BACKUP + "}, "
                + Json2AvroTransformationFlags.FILE_JSON_DELETE + "=${header." + Json2AvroTransformationFlags.FILE_JSON_DELETE + "}, "
                + "EXPORT_METHOD=${header.EXPORT_METHOD}")
        .convertBodyTo(File.class)
        .process(new Json2AvroProcessor(filenamePattern, tempFilePath))
        .choice()
            .when(header(Json2AvroTransformationFlags.FILE_AVRO_BACKUP).isEqualTo("true"))
                .to("file:///?fileName=${header.ARCHIVE_FOLDER}/${property.FILENAME}")
                .log("Transformed file: '${property.FILENAME}' (archived to '${header.ARCHIVE_FOLDER}')") …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks apache-camel camel-ftp

3
推荐指数
1
解决办法
693
查看次数

标签 统计

apache-camel ×1

camel-ftp ×1

java ×1

memory-leaks ×1