スキップしてメイン コンテンツに移動

JMeterのremoteサーバーをAzure仮想マシンで複数作って負荷テストする

大量リクエストの負荷テストシナリオを、Azure上に複数台のJMeterリモートサーバーを構築して実施した時の、手順を紹介します。

私自身が急いでテストする必要があった為、今回紹介するJMeterの負荷テスト環境は、複雑な設定不要で、すぐに作れます。

JMeterのremoteサーバーをAzure仮想マシンで複数作って負荷テストするイメージ

環境

Azure上に作る仮想マシンのOS、バージョン等について紹介します。

JMeterサーバー

OS
Ubuntu Server 18

※ メモリが少ないと、起動できるスレッド数が少なくなる為、最低でもメモリが 1.7G以上あるVMサイズを選んだ方がいいです

JMeterクライアント

OS
Windows 10

※ クライアントはOSとJMeterの操作が出来ればいいので、最低限のスペックでOKです。

インストールするパッケージ (JMeterクライアント/JMeterサーバー共通)

クライアント/サーバー共通で、以下のパッケージ(ソフト)をインストールします。

OS
Java 1.8
Apache JMeter 5.0

構成イメージ

今回作るJMeterでのテスト環境は、以下のようなイメージとなります。
Azure上にJMeterクライアント/サーバーを仮想マシンで作成して、テスト対象のWebサーバに対して負荷をかけるイメージです。

enter image description here

この構成のメリット

  1. JMeterの環境すべてがAzureで完結している
  2. JMeterクライアントとサーバーを同じ仮想ネットワーク内に作れば、デフォルトで全ポート番号で通信可能(ファイアウォールを気にしなくていい)
  3. JMeterクライアントはWIndowsなので操作しやすい。。。 (慣れの問題?)
  4. 仮想マシンをコピーして、簡単にJMeterサーバーを増殖可能

この構成のデメリット

  1. Azureへの投資(課金)が必要

Windowsの使用料まで必要なので、長期間使い続けると、それなりの課金額になる為、短期間でテストしましょう!

JMeterサーバの構築

Azureのポータルから、仮想マシンを作成します。
設定内容は以下を参考にして下さい。

項目 内容
イメージ Ubuntu Server 18
サイズ 1.7G以上のメモリを持つサイズ
ネットワーク SSH(22)ポートを空ける

その他の項目は適当で。。。
仮想マシンの作成が終わったら、SSHでログインします。

username@vm-name:~$ 

Javaのインストール

まずは、以下のコマンドで、リポジトリを最新します。

sudo apt-get update

Java 1.8 (OpenJDK)をインストールします。

sudo apt install openjdk-8-jre

インストールが完了したら、バージョンを確認するコマンドを入力します。
バージョンが "1.8.x_xxx"などと表示されればOKです。

$ java -version

openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

JMeterのインストール

今回は JMeter 5.0をインストールします。
以下のURLからパッケージをダウンロードし、tarで解凍します。

$ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//jmeter/binaries/apache-jmeter-5.0.tgz
$ tar xvzf apache-jmeter-5.0.tgz

もし、違うバージョンのJMeterをインストールしたい場合は、こちらのURLに各バージョンのダウンロードリンクがあります。

JMeterの起動を確認

以下のコマンドを入力して、バージョンが表示されればOKです。

$ ~/apache-jmeter-5.0/bin/jmeter -v

SSLの無効化

デフォルトでは、JMeterサーバ ⇔ クライアント間の通信は、SSLで暗号化する設定になっています。
設定が少し面倒で、とにかく早く環境が構築したかったので、今回はSSLを無効化します。

viエディタで、JMeterの設定ファイルを開きます。

$ vi ~/apache-jmeter-5.0/bin/jmeter.properties

SSL無効化の設定は、330行目付近にserver.rmi.ssl.disableという設定がいます。
こちらの設定のコメントを解除して、設定値にtrueを指定します。

# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
↑ コメントアウトを解除して true を設定

JMeterサーバーの起動

以下のコマンドを入力して、JMeterサーバーのサービスを立ち上げます。

$ ~/apache-jmeter-5.0/bin/jmeter-server

※このサービスを起動しておかないと、テストできないので、テストを開始する前にサービスを立ち上げるようにして下さい。

クライアント側の設定

今度は、JMeterクライアント(Windows10)をセットアップします。

Windowsの仮想マシンを作成

Azureのポータルから、Windows10の仮想マシンを作成します。
設定内容は以下を参考にして下さい。

項目 内容
イメージ Windows10 Pro
サイズ 4G以上あった方が快適かも…
ネットワーク RDP(3389)ポートを空ける

Javaのインストール

以下のページから、Java8をダウンロードしてインストールします。
https://java.com/ja/download/

JMeterのインストール

JMeterのダウンロードページにアクセスし、apache-jmeter-5.0.zipと書かれたファイルをダウンロードします。
https://jmeter.apache.org/download_jmeter.cgi

ダウンロード後、任意のフォルダに解凍しておきます。

JMeterの設定

JMeterを解凍したフォルダの、bin/JMeter.pppをエディタ開きます。
remoto hostsの部分に、作成したJMeterサーバのホスト名を設定し、ポート番号には1099を指定します。
複数台サーバを作成した場合は、カンマ区切りで設定します。

テスト計画

JMeterのテスト計画(.jmx)は、いつも通り作ります。
1点、テスト対象にかかる負荷(スレッド数)には気を配る必要があります。
例えば、スレッド数に 100を設定し、JMeterサーバが 5台ある場合、実際テスト対象にかかる負荷は、スレッド数(100) × JMeterサーバの数(5) = 500となります。
※ 設定したスレッド数を、サーバの台数で分散させるのではなく、単純な掛け算になる事に注意が必要です。

さいごに

今回なぜJMeterのテスト環境(クライアント・サーバー)の全てをAzure上に作ったのかの話です。

JMeterのクライアントとJMeterサーバーは、負荷テストの実行中は、相互に通信を行います。
その為、JMeterサーバーのポートの開放だけでなく、JMeterクライアント側もポートの開放が必要になります。
そうなると、JMeterのクライアントとサーバーが離れた環境にあると、途中のFireWallの設定などが必要になり、それが面倒だったので、今回Azure上にすべての環境を作りました。

スポンサーリンク
スポンサーリンク
スポンサーリンク

コメント

このブログの人気の投稿

axiosの使い方まとめ (GET/POST/例外処理)

axiosの使い方まとめ (GET/POST/例外処理)最近何かとよく使うJavaScriptでAJAX通信を行うaxiosについて、簡単に使い方をまとめました。GETリクエストをaxiosで送るまずはGETリクエストをaxiosで送る方法です。const res =await axios.get('/users') console.log(res.data)分割代入の記法を使うと、以下のようにも書けますconst{data}=await axios.get('/users') console.log(data)クエリパラメータ (URLパラメータ)を指定クエリパラメータを指定する方法は2つあります。1つ目は、axios.getに指定するURLに直接記述する方法です。axios.get('/user?id=123')2つめは、axios.getの第2引数に、オプション指定する方法です。axios.get('/user',{ params:{ id:123}})POSTリクエストをaxiosで送る次はPOSTリクエストをaxiosで送る方法です。JSON形式でPOSTするJSON形式でPOSTする場合は、axios.postの第2引数に、送信するデータをJavaScriptオブジェクトで指定します。const res =await axios.post('/user',{ id:123, name:'Yamada Tarou'})application/x-www-form-urlencoded形式でPOSTするapplication/x-www-form-urlencoded形式でPOSTする場合は、URLSearchParamsを使います。var params =newURLSearchParams() params.append('id',123) params.append('name','Yamada Tarou')const res =await axios.post('/user', params)axios でファイルをアップロードする画像などのファイルを、axiosでアッ…

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決する

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決するタイトルの通りですが、Windows 8 以降では Windows Form アプリケーションで、コントロールの ImeMode に Katakana や KatakanaHalf を設定しても、カタカナになってくれません。なぜ ImeMode が効かないのか?Windows 8 以降、IME Mode の切り替えは、ユーザー単位で切り替わるようになった為、アプリから IME Mode 制御が出来ないようになりました。
(IME をON にした場合、常に ひらがな モードになます)※ Windows 7までは、IME Modeの切り替えはアプリ単位で行われていた為、問題なくアプリから IME制御が行えました。対処方法Windows 8 以降、IMEの制御は、InputScope クラスの利用が推奨されています。
しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。
(Windows Form はもう使うな!という事でしょうか (涙) )結論としては、コントールパネルの設定で、IMEの制御をユーザ単位から アプリ単位に変更する事ができます。
これで、Windows Formアプリでも 従来通りIMEの制御を行う事が出来ます。おわりにこの方法だと、アプリをインストールする端末すべてに設定が必要となり、とっても面倒です。。。
しかし、今の所これしか方法がない状態です。
これからは Windows Formではなく、WPFや Windows ストアアプリで作れという事ですかね (^^;)

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]MailKitを使ってメールを送るサンプルコードです。(C#)UTF8/iso-2022-jpのエンコーディング指定、GMail/YahooのSMTPサーバで送るなど、4つのサンプルコードでMailKitの使い方を紹介します。MailKitって何?2017年に.NET標準のSystem.Net.Mail.SmtpClientが廃止予定となり、Microsoftより今後はオープンソースライブラリである、MailKitに置き換えるとアナウンスがありました。既にSmtpClientは非推奨になっており、今後は廃止されていきます。現在、SmtpClientを使用したソースコードには、Visual StudioからMailKitを使うよう警告が出るようになっています。さっそく、MailKitを使ってメールを送信するサンプルコードを作っていきます。UTF8でメールを送信文字エンコーディングを、UTF8でメールを送信するサンプルコードです。
MailKitは、デフォルトの文字エンコーディングがUTF8なっている為、シンプルなコードでメールを送信する事ができます。var host ="<smtp server name>"; var port =25;// or 587using(var smtp =new MailKit.Net.Smtp.SmtpClient()){//SMTPサーバに接続する smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);//認証が必要な場合は、以下のコメントを解除//smtp.Authenticate("<id>", "<password>");//送信するメールを作成する var mail =new MimeKit.MimeMessage(); var builder =new MimeKit.BodyBuilder(); mail.From.Add(new MimeKit.MailboxAddress("",&quo…