Load Tester (multiple remote servers) Powered by Apache JMeter™にJDBC Driverを追加導入する
Load Tester (multiple remote servers) Powered by Apache Jmeter™にJDBC Driverを導入する方法を説明します
Load Tester (multiple remote servers) Powered by Apache JMeter™は、Apache JMeter™をMicrosoft Azure上の複数のサーバーで稼働させ、大規模な負荷テストができるものです。
JMeterデフォルトでは添付されていないJDBC Driverが必要なデータソースへの負荷テストを行う場合、そのJDBC DriverファイルをすべてのJMeterサーバーに配布する必要があります。
しかし、多数のJMeterサーバーを用意した場合、そのすべてにJDBC Driverをセットアップすることは面倒な作業です。
Load Tester (multiple remote servers) Powered by Apache JMeter™では、それを簡単に実現する方法が用意されています。
手順概要
- JDBC Driverを取得する
- JMeterサーバーのJavaライブラリ用ディレクトリをネットワークディスクに作成し、JDBC Driverファイルを配置する
- JMeterサーバー用のjmeter.propertiesファイルでuser.classpathを設定する
- すべてのJMeterサーバーを一括再起動する
手順詳細
今回は、Microsoft SQL Server用JDBC Driverを導入し、Azure SQL Databaseへのテストをすることとします。
-
JDBC Driverを取得する
JMeterクライアントにリモートデスクトップでログインし、Webブラウザを利用して以下のページから最新のJDBC Driverをダウンロードします。
https://docs.microsoft.com/ja-jp/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15
コンソールで以下のようなコマンドを実行することでもダウンロードすることができます。$ curl -L https://go.microsoft.com/fwlink/?linkid=2137600 -o sqljdbc.zip
(2020/08/10現在)
-
JMeterサーバーのJavaライブラリ用ディレクトリをネットワークディスクに作成し、JDBC Driverファイルを配置する
クライアントおよびサーバーの /mnt/systmp および /mnt/jmuserdata にネットワークディスクがマウントされています。
このいずれかに、サーバー用のJDBC Driverファイルを配置するためのディレクトリを作成し、そこにJDBC Driverファイルをコピーします。$ mkdir /mnt/systmp/lib $ unzip {ダウンロードファイル.zip} $ cp sqljdbc_{バージョン}\\enu/mssql-jdbc-{バージョン}.jre8.jar /mnt/systmp/lib
Load Testerで利用するJavaのバージョンの変更方法はこちらをご参照ください。
-
JMeterサーバー用のjmeter.propertiesファイルでuser.classpathを設定する
JMeterサーバー用のjmeter.propertiesファイルは、クライアントから /mnt/systmp/jmeter.properties ファイルを編集することでサーバーに反映することができます。
ファイル内から “user.classpath"を探し出し、以下のように前の手順でJDBC Driverファイルを配置したディレクトリを設定します。# List of directories that JMeter will search for utility and plugin dependency classes. # Use your platform path separator to separate multiple paths. # Any jar file in such a directory will be automatically included, # jar files in sub directories are ignored. # The given value is in addition to any jars found in the lib directory. # All entries will be added to the class path of the system class loader # and also to the path of the JMeter internal loader. # Paths with spaces may cause problems for the JVM user.classpath=/mnt/systmp/lib
-
JMeterサーバーを再起動する
Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。
JMeterサーバーの仮想マシンのスケールセットは、Load Testerの導入時にJMeter ServersのVirtual machine scale set nameとして指定した名前で作られています。
これにより、すべてのJMeterサーバーが一括で再起動され、JDBC Driverが利用可能になります。
動作確認
それではJMeterでAzure SQL Databaseに対してテストをしてみましょう。
-
JMeterを起動する
-
Test Planに"JDBC Connection Configuration"を追加し設定する
Add (追加) > Config Element (設定エレメント) > JDBC Connection Configuration
- Variable Name Bound to Pool
- Variable Name for created pool: JDBC Request Samplerから指定する識別名
- Database Connection Configuration
- Database URL: 接続文字列(サーバー名およびデータベース名)
例)jdbc:sqlserver://SERVERNAME.database.windows.net:1433;database=DBNAME;
- JDBC Driver class: “com.microsoft.sqlserver.jdbc.SQLServerDriver”
- Username: 接続するユーザー名
- Password: 接続するユーザーのパスワード
- Database URL: 接続文字列(サーバー名およびデータベース名)
- Variable Name Bound to Pool
-
Test Planに"Thread Group"を追加する
Add (追加) > Threads (Users) > Thread Group (スレッドグループ) -
追加したThread Groupに"JDBC Request"サンプラーを追加し設定する
Add (追加) > Sampler (サンプラー) > JDBC Request- Variable Name Bound to Pool
- Variable Name of Pool declared in JDBC Connection Configuraion:
前のJDBC Connection Configurationで"Variable Name Bound to Pool"設定した値
- Variable Name of Pool declared in JDBC Connection Configuraion:
- SQL Query: テスト実行するSQL文
- Variable Name Bound to Pool
-
Test Planあるいは同じThread Groupに適当なリスナーを追加する
ここでは動作確認のために"View Results Tree"を追加します。
Add (追加) > Listener (リスナー) > View Results Tree (結果をツリーで表示) -
テストを実行する
メニュー > Run (実行) > Remote Start All (全て開始(リモート)) -
結果を確認する
View Results Treeで適当なJDBC RequestのSampler resultを選択し、Response messageが"OK"であればテストによるリクエストが成功しています。
リクエストが成功しない場合は、以下の手順で切り分けができるかもしれません。
- ログビューアを参照する
- メニューの Options (オプション) > Log Viewer
- ウィンドウ右下に表示されるログビューアに出力されたExceptionなどの情報から判断する
- クライアントだけでテストを実行する
- JMeterクライアントにJDBC Driverファイルを配置する
JDBC Driverファイルを /usr/local/jmeter/lib にコピーします。$ cp sqljdbc_{バージョン}\\enu/mssql-jdbc-{バージョン}.jre8.jar /usr/local/jmeter/lib/
- クライアントのJMeterを起動または再起動する
- メニュー > Run (実行) > Start (開始)
- View Results TreeのエラーになっているJDBC Requestの"Response data"から問題を判断する
- JMeterクライアントにJDBC Driverファイルを配置する
- クライアントだけでのテストではエラーにならない場合は、リモートテストでもResponse dataが取得できるようにする
- クライアントの設定ファイル (/usr/local/jmeter/bin/jmeter.properties) でmodeをStandardにする
# Remote batching support # Since JMeter 2.9, default is MODE_STRIPPED_BATCH, which returns samples in # batch mode (every 100 samples or every minute by default) # Note also that MODE_STRIPPED_BATCH strips response data from SampleResult, so if you need it change to # another mode # Batch returns samples in batches # Statistical returns sample summary statistics # mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender mode=Standard
- クライアントのJMeterを起動あるいは再起動する
- “Remote Start All (すべて開始(リモート))“でテストを実行し、View Results TreeのエラーになっているJDBC Requestの"Response data"から問題を判断する
解決したら、jmeter.propertiesファイルのmode設定を元に戻すことを忘れないように注意してください
- クライアントの設定ファイル (/usr/local/jmeter/bin/jmeter.properties) でmodeをStandardにする
JMeter Pluginも同様の方法で導入することができます。 その詳細な手順については今後書きたいと思っています。