При настройке распределенного тестирования 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 на серверных и клиентских узлах.
Есть ли обходной путь?
Я бы проверил три вещи:
/fd
подкаталог для процесса в /proc
дерево каталогов. Если ваше приложение не закрывает должным образом дескрипторы файлов, когда это делается, это может произойти.ulimit
для открытых файлов значение этого лимита чрезвычайно велико. Обычно значение по умолчанию составляет около 1024, а 65536 - очень высокое значение. Если происходит сбой туннеля, это может быть ssh-сервер или ssh-клиент. Исправить ограничение на количество открытых файлов ssh-сервера, вероятно, будет сложнее, чем установить ограничение на количество открытых файлов ssh-клиентов.
Вы можете использовать несколько туннелей, чтобы обойти это ограничение. Это немного усложнит вам скрипт jmeter, так как вам нужно будет распределить ваши соединения по туннелям.