Есть задача провести нагрузочное тестирование сайта. В качестве инструмента был выбран 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)