Jmeter распределенное тестирование по SSH туннелю
При настройке распределенного тестирования jmeter я столкнулся с проблемой удаленного подключения к серверам, которые находятся за NAT. Узел с клиентом jmeter имеет внешний ip, все серверы находятся в разных локальных сетях за NAT без возможности прямой переадресации портов.
Я решил попробовать SSH туннели.
На сервере:
> jmeter-server -Djava.rmi.server.hostname=127.0.0.1
> ssh -N -f -R 55500:127.0.0.1:55500 -R 55501:127.0.0.1:55501 -L 60000:127.0.0.1:60000 jmuser@client_node_ip -p 5000
На клиенте:
> jmeter -n -t testcase.jmx -l testcase.jtl -Djava.rmi.server.hostname=127.0.0.1 -r
Тест успешен в случае небольшого количества одновременных VU (10-100). Но когда я указываю больше VU, SSH туннель завершается с ошибками:
accept: Too many open files
open failed: administratively prohibited: open failed
Write Failed: broken pipe
Я вижу много соединений через порт 60000. Значение ulimit довольно велико = 1000000 на узлах сервера и клиента.
Есть ли обходной путь?
1 ответ
Я бы проверил три вещи:
- контролировать количество открытых файлов, которые приложение имеет во время тестирования. Существуют различные способы сделать это, но я просто считаю записи в
/fd
подкаталог для процесса в/proc
Дерево каталогов. Если ваше приложение неправильно закрывает дескрипторы файлов, это может произойти. - Проверить
ulimit
для открытых файлов значение, которое у вас есть, чрезвычайно велико для этого предела. Как правило, по умолчанию он составляет около 1024, а 65536 является чрезвычайно высоким. - Отслеживайте количество установленных соединений на порту 60000. Они будут учитываться при ограничении количества открытых файлов.
Если происходит сбой туннеля, это может быть ssh-сервер или ssh-клиент, который выходит из строя. Исправить ограничение на количество открытых файлов на сервере ssh, вероятно, будет сложнее, чем установить ограничение на количество открытых файлов для клиентов ssh.
Вы можете использовать несколько туннелей, чтобы обойти это ограничение. Это сделает ваш jmeter-скрипт немного более сложным, так как вам нужно будет распространять ваши соединения по туннелям.