数以百计的Apache SSHD客户端使数百个OpenSSH守护程序进程运行

时间:2015-08-07 05:23:55

标签: jsch openssh apache-mina sshd

我使用Apache SSHD java库的客户端来提供通过SSH读取的HTTP上的文件。概念应用很棒。

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

  • 在我的用户名/usr/lib/openssh/sftp-server
  • sshd:username@notty
  • 根目录为sshd: username [priv]

导致我的服务器内存不足而我的服务器崩溃。

我不认为这是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. 每次请求后关闭/停止我的会话和/或客户端? (该 这里的术语是如此通用但功能非常精确 我可能对每个组件有错误的理解)?
  2. 客户合并?
  3. 服务器配置以限制守护程序线程的数量?
  4. 减少超时(在客户端或服务器上)?
  5. 任何具体或一般性的见解都会有所帮助。

1 个答案:

答案 0 :(得分:1)

完成后,您必须断开SSH / SFTP会话:

client.stop();

客户端池并不是一个坏主意,但只有在断开连接后才能帮助它。