我使用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客户端请求?
任何具体或一般性的见解都会有所帮助。
答案 0 :(得分:1)
完成后,您必须断开SSH / SFTP会话:
client.stop();
客户端池并不是一个坏主意,但只有在断开连接后才能帮助它。