同様のタスクがあり、多くの問題にも遭遇しました。プロセス全体の詳細と、発生した問題を解決するために行ったことを以下に示します。それが役に立てば幸い。
世界のさまざまな地域にある 5 つのサーバーからリクエストを送信する必要がありました。そのため、AWS で 5 つのマイクロ インスタンスをそれぞれ異なるリージョンで起動しました。可能な限り地理的に離れた地域を選択しました。
リモート (サーバー) JMeters 構成
各インスタンスの設定方法は次のとおりです。
インストールされた Java:
$ sudo apt-get update
$ sudo apt-get install default-jre
インストール済みの JMeter:
$ mkdir jmeter
$ cd jmeter;
$ wget ftp://apache.mirrors.pair.com//jmeter/binaries/apache-jmeter-2.9.tgz
$ gunzip apache-jmeter-2.9.tgz;tar xvf apache-jmeter-2.9.tar
JMeter インストールjmeter.properties
のフォルダー内のファイルを編集し、設定を含む行のコメントを外します。ポートを 50000 に変更しました。/bin
server.rmi.localport
server.rmi.localport=50000
JMeter サーバーを開始しました。サーバーがリッスンしていると報告するアドレスとポートが正しいことを確認してください。
$ cd ~/jmeter/apache-jmeter-2.9/bin
$ vi jmeter-server
ローカル (クライアント) JMeter 構成
次に、JMeter をセットアップして、ローカル クライアント マシン上のこれらのインスタンスでテストをリモートで実行します。
- サーバーで実行されていたのと同じバージョンの JMeter を使用するようにしました。上記のように Java と JMeter をインストールしました。
- JMeter インストール
jmeter.properties
のフォルダーにあるファイルを編集して、リモート テストを有効にしました。bin
パラメータremote_hosts
は、接続先のリモート サーバーのパブリック DNS で設定する必要がありました。
remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x
これで、クライアントの JMeter インスタンスに、指定したリモート サーバーの一部またはすべてでテストを実行するように指示できるようになりました。
問題と解決策
発生した問題とその解決方法は次のとおりです。
クライアントは次のエラーで失敗しました:
エラー - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: 接続 - ホストへの拒否: 127.0.0.1
これは、Amazon NAT が原因で、サーバー ホストがプライベート IP アドレスをアドレスとして返すことが原因でした。サーバーの起動時にスクリプトに含まれるパラメーターRMI_HOST_DEF
を設定することで、これを修正しました。/usr/local/jmeter/bin/jmeter-server
RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
これで、AWS インスタンスがサーバーの外部 IP を返し、テストを開始できるようになりました。
サーバー ノードが結果を返し、クライアントに接続しようとすると、サーバーはローカル マシンの外部 IP アドレスに接続しようとしました。しかし、接続拒否エラーがスローされました:
2013/05/16 12:23:37 エラー - jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: ホストへの接続が拒否されました: xxx.xxx.xxx.xx;
クライアント側でリバース トンネルを設定することで、この問題を解決しました。
まず、JMeter インストールjmeter.properties
のフォルダー内のファイルを編集し、設定を含む行のコメントを外しました。ポートを 60000 に変更しました。/bin
client.rmi.localport
client.rmi.localport=60000
次に、SSH を使用して各サーバーに接続し、クライアントのポート 60000 へのリバース トンネルをセットアップしました。
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 ubuntu@54.x.x.x
JMeter サーバーはテスト結果をクライアントに配信できる必要があるため、これらの各セッションを開いたままにしました。
これにより、JMeter はlocalhost:60000
、結果を配信するためにサーバーに接続するように指示します。これは、最終的にクライアントにトンネリングされます。
サーバーへの SSH 接続は、少しの間アイドル状態になった後もドロップし続けました。これを防ぐために、各 SSH トンネル設定にパラメーターを追加して、クライアントが 60 秒間待機してからサーバーに null パケットを送信して接続を維持するように指示しました。
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 ubuntu@54.x.x.x
(.ssh/config
必要なすべての SSH 設定のバージョン:
Host 54.x.x.x
HostName 54.x.x.x
Port 22
User ubuntu
ServerAliveInterval 60
RemoteForward 127.0.0.1:60000 127.0.0.1:60000
IdentityFile ~/.ssh/54-x-x-x.us-east.pem
IdentitiesOnly yes
ssh 54.x.x.x
これを設定してから使用してください。)