chadselph opened a new issue, #743: URL: https://github.com/apache/mina-sshd/issues/743
### Version 2.15.0 ### Bug description I'm seeing an issue where using `SftpFileSystemProvider` to download a file does not release resources, even when reading the file within a `try(...)` block. However, this only reproduces when I'm running from an [executable jar](https://docs.spring.io/spring-boot/specification/executable-jar/index.html). Minimal-ish example: ```java public static void main(String[] args) throws Exception { var uri = args.length == 1 ? URI.create(args[0]) : URI.create( // use: docker run -p 2200:22 -v path-to-file:/home/demo/sftp --rm -it emberstack/sftp "sftp://localhost:2200/sftp/anyfile.txt" ); for (int i = 0; i < 100; i++) { var data = fetchData(uri, "demo", "demo"); System.out.println(i + " Got " + data.length + " bytes"); System.out.println(Thread.getAllStackTraces().size() + " threads"); } } public static byte[] fetchData(URI url, String user, String pw) throws Exception { URI uri = SftpFileSystemProvider.createFileSystemURI(url.getHost(), url.getPort(), user, pw); try (FileSystem fs = FileSystems.newFileSystem(uri, Map.of(), Thread.currentThread() .getContextClassLoader())) { Path remotePath = fs.getPath(url.getPath()); return Files.readAllBytes(remotePath); } } ``` ### Actual behavior When I package the app into a jar with the spring boot plugin, which uses a custom classloader, the number of threads increases by 14 with each `fetchData` call. ``` ./gradlew bootJar && java -jar build/libs/sshd-leak-0.0.1-SNAPSHOT.jar 21 threads 35 threads 49 threads 63 threads 77 threads 91 threads 105 threads 119 threads 133 threads 147 threads 161 threads 175 threads 189 threads 203 threads 217 threads 231 threads ``` etc. The DirectMemory usage also increases each time, and Spring's docker images annoyingly default DirectMemory to 10MB, so this causes docker images to run out of memory quickly. I've also reproduced this behavior from scala-cli's jar assembly jars, so it isn't completely unique to Spring. ### Expected behavior With spring-boot gradle plugin, when I run `./gradlew bootRun`, or just from IntelliJ, everything works as expected: ``` 20 threads 21 threads 22 threads 23 threads 24 threads 25 threads 26 threads 27 threads 28 threads 29 threads 30 threads 30 threads 30 threads 30 threads 30 threads 30 threads 30 threads ``` The threads grow but they stabilize. ### Relevant log output ```Shell ``` ### Other information I can provide a full, working gradle project if that's helpful. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org