Azure Marketplace "Load Tester (multiple remote servers) Powered by Apache JMeter™" 使用方法

Last updated:


Select a language: [English] [日本語]

はじめに

このドキュメントはAzure Marketplaceで提供されている “Load Tester (multiple remote servers) Powered by Apache JMeter™” の説明書です。

Load Tester (multiple remote servers) Powered by Apache JMeter™とは

“Load Tester (multiple remote servers) Powered by Apache JMeter™” はJMeterを複数のサーバ上で稼働させ、大規模な負荷テストをすることを目的としています。

※単体のサーバでApache JMeterから負荷をかけたい場合は、"Load Tester (standalone) Powered by Apache JMeter™" をご利用ください。

Load Tester (multiple remote servers) Powered by Apache JMeter™の特徴

  • Apache JMeter 5.6.3、5.6.2、5.6、5.5、5.4.3、5.4.2、5.4.1、5.4、5.3
  • Microsoftのリモート デスクトップ クライアントから接続可能 (xrdp導入済み)
  • 多くのローエンドコンピューター間でテストを複製できるため、より大きな負荷テストが実施可能
  • すべてのJMeterサーバに負荷テスト用のCSVファイルを配布可能
  • 日本語、韓国語、中国語フォント導入済み
  • Ubuntu 20.04 LTS
  • Azure仮想マシンとして提供されている他、いくつかのPaaSを使用

システム要件

  • Virtual machineが TCP/3389 への接続を受け付けること (Remote Desktop Serviceで外部からの接続を受け付け、GUI操作をしたい場合)
  • Virtual machineが TCP/22 への接続を受け付けること (SSHで外部からの接続を受け付け、操作をしたい場合)

構築方法

Azure Marketplace上の “Create Load Tester (multiple remote servers) Powered by Apache JMeter™” を選択し、必要なパラメータ情報を設定後デプロイします。

構築に必要なパラータの説明は以下の通りです。

  • “Basic” タブ

    • サブスクリプション、リソースグループ、リージョン
      デプロイを行うサブスクリプション、リソースグループ、リージョンを選択若しくは入力します。
    • Username
      Usernameを入力します。
    • Authentication type
      • 「パスワード」を指定した場合
        • Password, Confirm password
          SSH、リモートデスクトップで接続する際のパスワードを入力します。 (JMeterクライアントとサーバに同じ設定が適用されます)
      • 「SSH公開キー」を指定した場合
        • SSH public key
          作成したSSH public keyを入力します。 (JMeterクライアントとサーバに同じ設定が適用されます)
        • Password for Remote Desktop connection, Confirm password
          リモートデスクトップ接続の認証に使うパスワードを入力します。
  • “Networking” タブ

    • Virtual network
      新規作成の場合は仮想ネットワーク名とCIDRを指定します。既存の仮想ネットワークも選択可能です。
    • JMeter client Subnet
      JMeterクライアントを配置するサブネット名とCIDRを指定します。
      既存の仮想ネットワークを指定した場合には配置するサブネットを選択します。
    • JMeter servers Subnet
      JMeterサーバを配置するサブネット名とCIDRを指定します。
      既存の仮想ネットワークを指定した場合には配置するサブネットを選択します。

    既存の仮想ネットワークを選択して、そのサブネットにNSGが設定されている場合は、以下のセキュリティ規則を追加してください。

    • JMeterクライアントサブネット
      • 受信セキュリティ規則 - JMeterサーバサブネットから TCP/1099,30000-65535 を許可
      • 受信セキュリティ規則 - JMeterクライアントに接続するクライアントから TCP/3389,22 を許可
    • JMeterサーバサブネット
      • 受信セキュリティ規則 - JMeterクライアントサブネットから TCP/1099,30000-65535 を許可
  • “Storage” タブ

    • File shareing storage account
      CSVデータファイルと、各種設定をJMeterサーバと共有するストレージアカウントを指定します

      「新規作成」を押すと、ストレージアカウント名などの変更ができますが、アカウントの種類は何を選択しても「StorageV2」が設定されます。

  • “JMeter client” タブ

    • JMeter client virtual machine name
      JMeterクライアント名を設定します
    • Size
      JMeterクライアントのインスタンスサイズを選択します
    • OS disk type
      Azureマネージドディスクの種類を選択します
    • Public IP
      JMeterクライアントのパブリックIPアドレス名を設定します

      NAT Gatewayを持つ既存の仮想ネットワークにJMeter clientを配置する場合、Public IPのSKUは「Standard」である必要があります。

    • DNS name label (オプション)
      JMeterクライアントに接続するためのDNSサフィックスを設定します
  • “JMeter servers” タブ

    • Virtual machine scale set name
      JMeterサーバのスケールセット名を設定します
    • Size
      JMetersサーバのインスタンスサイズを選択します
    • OS disk type
      Azureマネージドディスクの種類を選択します
    • Instance count
      JMeterサーバのインスタンス数を設定します
    • Public IP address per instance
      本オプションを有効にするとJMeter serverの各インスタンスにパブリックIPアドレスが付与されます。

      NAT Gatewayを持つ既存の仮想ネットワークにJMeter serverを配置する場合、この値は無効にする必要があります。
      仮想ネットワークがNAT Gatewayを持たず、JMeterでテストする対象がインターネット側の場合には、この値を有効にすることを推奨します。

    Azureサブスクリプションの制限に注意してください。(vCPU数、インスタンス数、パブリックIPアドレス数など)

  • “Tags” タブ
    作成されるリソースにタグを設定します。

Network Security Group (NSG) は仮想マシンのNICに対して設定されます。

JMeterクライアントでは、以下のインバウンドルールがNSGに追加されます。

  • 任意の送信元から RDP(TCP/3389) を許可
  • 任意の送信元から SSH(TCP/22) を許可

必要なところからのみ接続を許可するように、このNSG設定を変更することをお薦めします。

利用方法

※ Apache JMeterの使用方法はこのドキュメントには含まれていません

JMeterクライアントへ接続

お好みにより、Remote DesktopによるGUI操作と、SSHによるCUI操作を選択できます。

GUIによる操作

  1. Remote Desktop接続

    1. クライアントPCからリモートデスクトップ(RDP)で接続します。

      • コンピューター : 構築方法 にて設定した仮想マシンのパブリックIPアドレスを入力します。Azureポータルの概要ブレードからも確認できます。
    2. リモートデスクトップ画面が表示され、「Login to (仮想マシン名)」のダイアログが表示されるので、以下の情報を設定して [OK] をクリックします。

      • Session : Xorg
      • username : Marketplaceからデプロイした時に指定したユーザー名
      • password : Marketplaceからデプロイした時に指定したパスワード
  2. Apache JMeterの起動

    1. リモートデスクトップ画面の [JMeter] をダブルクリックします。

    2. [Options] メニューの [Choose Language] から表示言語の変更が行なえます。

CUIによる操作

SSHで接続し、操作してください。

JMeterのパス:/usr/local/jmeter

CSVデータファイルの配布方法

JMeterクライアントおよびすべてのJMeterサーバは、/mnt/jmuserdata ディレクトリに共有ストレージをマウントしています。

そのため、JMeterクライアントで /mnt/jmuserdata ディレクトリにファイルを置くことで、そのファイルはJMeterサーバで利用することが可能になります。

また、JMeterクライアントから以下のように /mnt/jmuserdata/sync.to ファイルにコピー先のディレクトリを指定をすることで、/mnt/jmuserdata ディレクトリに置いたファイルが、各JMeterサーバのそのディレクトリに同期されます。

[/mnt/jmuserdata/sync.to]

# Load Tester user files copy setting file
#
# The files in this directory will be synced to the directory listed in this file when the JMeter servers are started.
# If there are files in the destination directory that are not in this directory, they will be deleted.
#
/mnt/resources/jmuserdata
  • 同期タイミング
    JMeterサーバの起動時 (JMeterサーバの仮想マシンスケールセットを再起動することですべてのJMeterサーバに同期されます。)
  • 同期方法
    • JMeterサーバのローカルディスク上の該当ディレクトリ内のファイル、ディレクトリは全て共有ディスクと同じ内容になります。
    • JMeterサーバのローカルディスク上で新たにファイルを追加、更新を行っても次回の同期タイミングで上書き、削除されます。
    • 同期先ディレクトリの設定を変更した場合、各JMeterサーバに同期済みのファイル、ディレクトリは削除されずその時点のままとなります。
  • JMeterクライアントでの動作
    • JMeterクライアントでは、/mnt/jmuserdata/sync.to に指定したディレクトリに対し、JMeterクライアントから設定したタイミングでシンボリックリンクが作成されます。
    • ただし、JMeterクライアント以外から設定を変更した場合は作成されません。
      その場合はJMeterクライアントを再起動する事でシンボリックリンクが作成されます。
    • 同期先ディレクトリの設定を変更した場合、作成済みシンボリックリンクは削除されません。
  • 推奨事項/注意事項
    • 2021年1月20日(UTC)以降に新規デプロイしたLoad Testerを利用している場合に有効です。
    • 同期先ストレージに入りきらない量のファイルを /mnt/jmuserdata ディレクトリに置いた場合は、JMeterサーバが正常に動作しなくなります。
    • 基本的には同期先ディレクトリは /mnt/resoures/jmuserdata とすることをお薦めします (ローカル一時ディスクがマウントされているため)。
      ただし、Aシリーズは、ローカル一時ディスクのパフォーマンスが不安定なため、/tmp/jmuserdata などをお薦めします。

JMeterクライアントとJMeterサーバのインスタンスサイズを変更する場合

AzureポータルやAzure CLIなどを使用して、JMeterクライアントとサーバのインスタンスサイズを変更できます。

JMeterサーバのインスタンス数を変更する場合

AzureポータルやAzure CLIなどを使用して、JMeterサーバのインスタンス数を変更できます。

JMeterサーバの数を変更した後には次のコマンドを実行して、JMeterクライアントが参照するサーバ一覧を更新します。

/usr/local/jmeter/bin/jmeter.properties ファイルが更新されます。

$ ~/refresh-jmeter-servers.sh

JAVA実行環境の調整方法

もし、JAVA実行環境の調整が必要な場合 (例:-Xmx, -Xms) 以下の手順で行います。

JMeterクライアント

~/.loadtesterファイルにある “JVM_ARGS” 環境変数を修正します。

その後、JMeterクライアントからログアウト後に再度ログインします。

JMeterサーバ

JMeterクライアントで /mnt/systmp/jmeter-server-option.sh ファイルを変更し、AzureポータルなどからJMeterサーバの仮想マシンスケールセットを再起動します。

JMeterサーバの「jmeter.properties」変更方法

JMeterクライアントで /mnt/systmp/jmeter.properties ファイルを変更し、AzureポータルなどからJMeterサーバの仮想マシンスケールセットを再起動します。

本ファイルを誤った内容で変更した場合、JMeterサーバが起動しなくなる恐れがありますので、変更前にファイルのバックアップを取ることをお勧めします。

JAVA versionの変更方法

デフォルトではJRE 8上でJMeterが動作します。

仮想マシン上には以下のJREが導入済みで、任意のversionに変更することができます。

  • JRE 8 (デフォルト)
  • JRE 11
  • JRE 17

JMeterクライアントで ~/.loadtester と /mnt/systmp/jmeter-server-option.sh の末尾にJAVA_HOMEの設定を追加します。

  • JRE 11を利用する場合: export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

JRE 11を利用する場合の設定例

export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

その後、JMeterクライアントは仮想マシンからログアウト後に再度ログインし、またAzureポータルなどからJMeterサーバの仮想マシンスケールセットを再起動します。

日本語入力の設定

JMeter でコメントを日本語で入力したい場合などでお試しください。

  1. クライアントPCからリモートデスクトップ(RDP)で接続します。

  2. リモートデスクトップ画面の [Applications] メニューから [Settings] を選択後、 [Session and Startup] をクリックします。
    日本語入力_001

  3. [Application Autostart] タブで一覧中の [ibus-daemon] をチェック後、[Close] をクリックします。 日本語入力_002

  4. リモートデスクトップからログアウト後に再度ログインします。

  5. リモートデスクトップ画面の [Applications] メニューから [Settings] を選択後、 [iBus Preferences] をクリックします。
    日本語入力_003

  6. [Input Method] タブで [Add] をクリック後に表示される [Select an input method] 画面にて、[Japanese] をクリック後に表示される一覧から [Kana Kanji] を選択後、[Add] をクリックします。
    日本語入力_004

  7. [Japanese - japanese] を選択、[Remove] をクリックし、[Input Method] から削除後 [Close] をクリックしてiBus Preferences 画面を終了します。
    日本語入力_005

  8. リモートデスクトップ画面の [Applications] メニューから [Settings] を選択後、 [Language Support] をクリックします。
    日本語入力_006

  9. [Language] タブで [Keyboard input method system] のプルダウンメニューから [iBus] を選択後、[Close] をクリックして Language Support 画面を終了します。
    日本語入力_007

  10. デスクトップ画面上部のステータスバーに [あ] が表示されることを確認、[半角/全角] キーで日本語と英語の切り替えを行います。
    日本語入力_008

ソフトウェアのアップデートについて

Ubuntu及びJMeterをはじめとした各種のソフトウェアバージョンは、Azure Marketplaceに登録時点の最新 Version が適用済みです。

必要に応じてUbuntuおよびソフトウェアのアップデートを行ってください。

FAQ

Remote Desktopでvirtual machineに接続できない

Virtual machineにTCP/3389ポートで接続できる必要があります。
以下を確認してください。

  • サブネットやNICに割り当てているAzure NSGでTCP/3389の受信を許可する設定になっているか?
  • Azure LoadBalancer経由の場合はそのLoadBalancerが適切に仮想マシンのTCP/3389にフォワードするようになっているか?

OSが正常に起動しない / Remote Desktopへのログインが行えない

仮想マシンを正常に動作させるためには、OSのメモリは2GB以上必要です。
仮想マシン及び仮想マシンスケールセットのサイズを適切なものに変更してください。

Apache JMeter™がメモリ不足により起動しない

JVM_ARGS環境変数に -Xmsおよび-Xmsを指定して、JMeterが使用するヒープメモリサイズを調整してください。
「利用方法」の章にある JAVA実行環境の調整方法 を参照してください。

仮想マシン、仮想マシンスケールセットのデプロイに失敗する

デプロイ中に「QuotaExceeded」や「PublicIPCountLimitExceededByVMScaleSet」などのエラーが出力された場合、vCPUやパブリックIPアドレスの数がサブスクリプションの制限を超えています。

その場合は、Azureサポートに連絡して制限値を増やすか、仮想マシンのサイズ・台数を少なくした上で再度デプロイします。

リモートテストを実行すると、以下のエラーが発生してテストをすることができない

Error serialVersionUID

Error in rconfigure() method java.rmi.ServerException:  RemoteException occurred in server thread; nested exception is:  
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:  
    java.io.InvalidClassException: org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase; local class incompatible: stream classdesc serialVersionUID = {???}, local class serialVersionUID = {???}

クライアントとサーバーのJMeterのバージョンが異なる可能性があります。
クライアントとサーバーのJMeterバージョンを同じものにするために、select-jmeter-version.shコマンドにより利用するJMeterのバージョンを指定した後、AzureポータルなどからJMeterサーバの仮想マシンスケールセットを再起動します。

例) JMeterのバージョンを5.3にする場合の設定方法

  1. select-jmeter-version.shスクリプトで利用するバージョンを指定

    $ ~/select-jmeter-version.sh 5.3
    Success
    Please restart JMeter servers virtual machine scale set.
    

    現在選択できるJMeterのバージョン

    • 5.5
    • 5.4.3
    • 5.4.2
    • 5.4.1
    • 5.4
    • 5.3
  2. AzureポータルなどからJMeterサーバの仮想マシンスケールセットを再起動する

~/select-jmeter-version.shスクリプトが存在しない場合は、Load Testerの古いリリースを利用しているため、JMeterバージョンの選択をすることができません。
その場合は以下の手順でJMeterのバージョンを記述した/mnt/systmp/jmeter-versionファイルを作成することで、クライアントとサーバーのバージョンを揃えることができます。

  1. クライアントで利用しているJMeterバージョンを知る

    $ /usr/local/jmeter/bin/jmeter.sh -v
    

    出力が以下の場合のバージョンは5.3です。
    jMeter.sh -v

  2. /mnt/systmp/jmeter-versionファイルにJMeterのバージョンを書き込む

    $ echo 5.3 > /mnt/systmp/jmeter-version
    $ cat /mnt/systmp/jmeter-version
    5.3
    
  3. AzureポータルなどからJMeterサーバの仮想マシンスケールセットの全てのインスタンスを再イメージ化する

デプロイ時に「“VMExtension ‘CustomScriptExtension’ のタグが、仮想マシン スケール セット ‘{JMeter server名}’ のタグと一致していません。タグを指定する場合は両者が一致するようにしてください。"」エラー

Azure Policyにより「存在しない場合は、サブスクリプションからタグを継承する」などのポリシーの対象となると発生します。
Azure Portalでのデプロイ時に、“Tags"タブで継承元に設定されているタグと同じものを設定することで、この問題を回避できます。

サポートについて

サポートは有償にて承ります。

  • サポート対象お問い合わせ例
    • 対象のソリューションがデプロイできない
    • デプロイ直後の仮想マシンが正常に動作しない
  • 以下はサポート対象外になります
    • UbuntuやJMeterに関する一般的な使用方法
    • Azureに関する一般的なご質問については弊社提供の『Azure技術支援サービス』にて承ります。

サポートをご希望の方は以下にお問い合わせください。

  • 株式会社 pnop - Marketplace Solutionsサポート営業窓口
  • sales@pnop.co.jp

Apache®, Apache JMeter™, JMeter, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. No endorsement by The Apache Software Foundation is implied by the use of these marks.