Ich habe ein Speicherleck in einer unserer Anwendungen analysiert und beim Analysieren eines Heapdumps habe ich festgestellt, dass> 98% des Speichers von Camels SharedProducerServicePool
belegt sind. Im Wesentlichen hält es eine Los von RemoteFileProducer
in seinem Pool (in diesem speziellen Beispiel etwa 41k). Alle von ihnen haben eine SftpEndpoint
.Camel hält SFTP-Verbindungen geöffnet, was zu Speicherleck führt
Das Folgende ist die Camel Route, die schließlich eine Datei über SFTP uploads:
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}')")
.end()
.choice()
.when(header(Json2AvroTransformationFlags.FILE_AVRO_SFTP).isEqualTo("true"))
.log("Upload to SFTP '" + getSFTPExportStringForLogging() + "'")
.recipientList(simple("sftp://${header.SFTP_USER}@${header.SFTP_HOST}:${header.SFTP_PORT}/${header.SFTP_DIR}?password=${header.SFTP_PASSWORD}&fileName=${property.FILENAME}&disconnect=true")).end()
.end()
.process(new JsonFileOperationProcessor(backupPath))
.aggregate(constant(true), new DisabledAggregationStrategy())
.completionSize(simple("${property.fileListCount}"))
.log("Number of files: ${property.fileListCount}")
.to("activemq:queue:transformCompleted")
.id("insertIntoMessageQueue");
Was könnte der Grund sein, dass die SFTP-Verbindungen geschlossen werden nicht oder die Produzenten bekommen erstellt, aber nicht wieder aufgehört haben? Ich kann keinen Hinweis in der offiziellen Dokumentation finden.
Jede Hilfe ist sehr appreaciated :)
Hinweis: Die hier verwendete Caml Version 2.17.0 Camel
Danke für Ihre schnelle Antwort! Ich werde es versuchen und danach zu dir zurückkommen. –