Я использую клиент java-библиотеки Apache SSHD для обслуживания файлов через HTTP, которые читаются через SSH. Концептуальное приложение отлично работает.
Но когда я хочу читать сотни файлов последовательно (например, для отображения изображений в галерее), я сталкиваюсь с проблемами масштабируемости: мой сервер заканчивается сотнями процессов демона 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?
- Закрыть/остановить мой сеанс и/или клиент после каждого запроса? (терминология здесь настолько общая, но функциональность настолько точна, что у меня может быть неправильное понимание каждого компонента)?
- Объединение клиентов?
- Конфигурация сервера для ограничения количества потоков демона?
- Уменьшить таймаут (на клиенте или на сервере)?
Любое понимание, конкретное или общее, было бы полезно.