[JMeter] Запуск тестов на нескольких компьютерах через SSH-туннелирование

Есть задача провести нагрузочное тестирование сайта. В качестве инструмента был выбран Apache JMeter. Решил распараллелить нагрузку, используя экземпляр JMeter еще на одном компьютере. Таким образом нагрузка будет генерироваться с двух компьютеров:

  • Компьютер А - на нем запущен JMeter client (работает на Windows)
  • Компьютер B - на нем запущен JMeter server (работает на Debian)

В сети много инструкций о том, как связать client + server, но в основном все они упираются в то, что компьютеры, на которых запущен JMeter, должны находится в этой сети, что в реальных условиях бывает нечасто. Если компьютеры находятся не в одной сети, то имеем проблему, из-за которой экземпляр JMeter server не может связаться с JMeter client из-за того, что последний, допустим, находится за NAT'ом.

И тут на помощь приходит SSH-туннелирование, которое по сути создает VPN-сеть.

Далее следует описание того, что и как нужно сделать, чтобы все заработало.

На компьютере А редактируем файл настроек bin/jmeter.properties:

remote_hosts=127.0.0.1:55501
client.rmi.localport=55512

На компьютере В редактируем файл настроек bin/jmeter.properties:

server_port=55501
server.rmi.localport=55511

Теперь необходимо создать SSH-туннель:

ssh -L 55501:127.0.0.1:55501 -L 55511:127.0.0.1:55511 -R 55512:127.0.0.1:55512 user@hostname

JMeter я запускаю на Windows, поэтому, чтобы использовать SSH, я поставил соответствующий пакет в Cygwin ^_^ (а можно еще туннелирование сделать, допустим, через PuTTY).

После того, как создался туннель, необходимо на компьютере В запустить JMeter server:

./jmeter-server -Djava.rmi.server.hostname=127.0.0.1

Будет выведено:

Using local port: 55511
Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.0.1:55511](local),objID:[6050b6ed:1449682cee5:-7fff, -8747782421079060026]]]

А на компьютере А запустить JMeter client:

jmeter.bat -Djava.rmi.server.hostname=127.0.0.1

Теперь осталось в открывшемся JMeter GUI запустить тест меню "Run" -> "Remote Start All"

В консоль на компьютере А будет выведено:

Using remote object: UnicastRef [liveRef: [endpoint:[127.0.0.1:55511](remote),objID:[6050b6ed:1449682cee5:-7fff, -8747782421079060026]]]

В консоль на компьютере В будет выведено:

Starting the test on host 127.0.0.1:55501 @ Thu Mar 06 12:29:30 MSK 2014 (1394094570737)
Finished the test on host 127.0.0.1:55501 @ Thu Mar 06 12:29:50 MSK 2014 (1394094590461)