数百个 Apache SSHD 客户端留下数百个 OpenSSH 守护进程 运行

Hundreds of Apache SSHD clients leave hundreds of OpenSSH daemon processes running

我使用 Apache SSHD java 库的客户端通过 HTTP 提供通过 SSH 读取的文件。概念应用程序效果很好。

但是当我想连续读取数百个文件时(例如,在图库中显示图像)我 运行 遇到了可伸缩性问题:我的服务器最终有数百个 OpenSSH 守护进程:

这会导致我的服务器 运行 内存不足并且我的服务器崩溃。

我不认为这是 OpenSSH 中的错误(我正在使用 OpenSSH_5.9p1),而是我如何使用 Apache SSHD 客户端。

这是我每次提供文件时 运行 的代码:

SshClient client = SshClient.setUpDefaultClient();
client.getProperties().put(ClientFactoryManager.HEARTBEAT_INTERVAL, "50000");
client.start();
session = client.connect("username", "server", 22).await().getSession();
session.addPasswordIdentity("password");
session.auth().await();
SftpClient sftp = session.createSftpClient();
// Create an HTTP response from an sftp channel stream

以下哪项(如果有的话)我需要发出数百个 JSch 客户端请求?

  1. Close/stop 我的会话 and/or 客户端每次请求后? (这 这里的术语是如此通用,但功能却如此精确 我可能对每个组件有错误的理解)?
  2. 客户端池?
  3. 服务器配置来限制守护线程的数量?
  4. 减少超时(在客户端或服务器上)?

任何具体或一般的见解都会有所帮助。

您一定要在完成后断开 SSH/SFTP 会话:

client.stop();

客户端池是个不错的主意,但你只在断开连接后才这样做无济于事。