DUICUO

JMeter 分散テストにおける注意事項とよくある問題

JMeterはオープンソースのパフォーマンステストツールです。分散テストにJMeterを使用する場合は、いくつかの詳細事項と問題点を考慮する必要があります。そうしないと、テスト結果の精度と信頼性に影響が出る可能性があります。

I. JMeter分散テスト中に特別な注意が必要ないくつかの側面

1. パラメータ化ファイルの場所と内容

パラメータ化に CSV ファイルを使用する場合、つまり、CSV ファイルからデータを読み取ってテスト スクリプトに異なる入力値を提供する場合は、次の 2 つの点に注意する必要があります。

  • パラメータ ファイルを各スレーブにコピーする必要があります。JMeter はパラメータ ファイルを bin ディレクトリ内で直接検索するため、できれば bin ディレクトリに配置することをお勧めします。
  • パラメータ ファイルの内容は一貫している必要があります。つまり、各スレーブのパラメータ ファイル内の行数、列数、およびデータ型が同じである必要があります。そうでない場合、データの不一致やデータの欠落が発生する可能性があります。

2. スレーブマシンからの応答データ

スレーブマシンでスクリプトを実行すると、アサーションが成功した場合、リクエストとレスポンスのデータはマスターマシンでは表示されません。スレーブのレスポンスは、アサーションが失敗した場合にのみ表示されます。これは、ネットワーク帯域幅を節約し、テスト効率を向上させるためです。分散テストでは通常、テスト結果の統計と分析に重点が置かれ、各リクエストの詳細なデータを表示することは重視されないためです。スレーブのレスポンスデータを表示する必要がある場合は、スレーブマシンでjmeter.logファイルを開くか、マスターマシンでJMeterプロパティをmode=Standardに設定できますが、ネットワークオーバーヘッドとテスト時間が増加します。

3. TCPサンプラーの設定

TCP プロトコルに対して JMeter 分散テストを使用する場合は、次の 2 つの点に注意する必要があります。

  • TCPサンプラーでは、「TCPClientクラス名」フィールドに適切なプロトコルを入力する必要があります。例えば、バイナリデータを送信する場合はorg.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl、テキストデータを送信する場合はorg.apache.jmeter.protocol.tcp.sampler.TCPClientImplと入力します。そうしないと、データ形式が正しくなかったり、データを送信できないなどの問題が発生する可能性があります。
  • TCPパケットを16進数で送信する場合、TCPサンプラーの「行末(EOL)バイト値」フィールドに行末文字を入力する必要があります。例えば、パケットが0D 0Aで終わる場合は13と入力してください。そうしないと、JMeterは応答せずに無期限に待機し続けます。

4. LinuxでのJMeter環境変数の設定

LinuxシステムでJMeterを使用している場合は、コマンドラインから直接JMeterを起動できるように、JMeter環境変数を設定する必要があります。具体的な手順は以下のとおりです。

/etc/profile ファイルを編集し、次の変数を追加します。

 export JMETER_HOME=/usr/local/jmeter-5.0 export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH export PATH=$JMETER_HOME/bin:$PATH

設定ファイルをすぐに有効にするには、次のコマンドを実行します。

 source /etc/profile

インストールが成功したかどうかを確認するには、次のコマンドを実行します。

 jmeter -v

II. JMeter分散テストにおける一般的な問題と解決策

質問 1: マスター ノードで jmeter-server.bat を実行すると、次のエラーが発生します: 「Exception creating connection to: 192.16..; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (The system cannot find the file provided)」。

原因: JMeter バージョン 4.0 以降では、RMI 接続によるセキュア通信がデフォルトで有効になっています。これにはキーストアの作成が必要です。そのため、キーストアが作成されていない場合、このエラーが発生します。

解決:

  • 方法 1: apache-jmeter/bin/jmeter.properties のパラメータを変更します: server.rmi.ssl.disable=true

注: マスター マシンとスレーブ マシンの両方の `jmeter.properties` ファイルで、パラメータ `server.rmi.ssl.disable` を `true` に変更します。

Linuxでは、次のコマンドを使用します:`vi jmeter.properties`。その後、`/server.rmi.ssl.disable/` を使って `jmeter.properties` を検索します。

  • 方法2:キーと証明書を手動で生成します。`create-rmi-keystore.bat`(Windowsの場合)または`create-rmi-keystore.sh`(Linuxの場合)を実行して、キーファイル`server.rmi.ssl.keystore.file`を生成します。次に、このキーファイルをすべてのロードバランサーのbinディレクトリにコピーし、`jmeter.properties`ファイルを変更します。

質問 2: スレーブ (Linux システム) で jmeter-server を実行すると、「エラーが発生しました: 起動できません。localhost はループバック アドレスです」というエラーが発生します。

理由: JMeter はデフォルトで RMI のホスト名として localhost を使用しますが、localhost はループバック アドレスであり、リモート接続には使用できません。

解決:

  • 方法 1: 次のコマンドを実行します: ./jmeter-server -Djava.rmi.server.hostname=192.16.*.* (ローカル IP アドレス)
  • 方法2: jmeter-serverファイルを変更する
# vi jmeter-server 将jmeter-server中的RMI_HOST_DEF=-Djava.rmi.server.hostname=192.16.*.*(本机ip)

./jmeter-server を実行するだけです。

注: Linux でバックグラウンドで実行し、サーバーを有効にします: `nohup ./jmeter-server -Djava.rmi.server.hostname=192.16.. &`

JMeterが正常に起動したかどうかを確認するには: `ps axu | grep jmeter`

質問 3: スレーブ マシンをリモートで起動すると、「Jmeter ネストされた例外は:java.net.ConnectException 接続がタイムアウトしました:connect」というエラーが発生します。

原因: 次の理由が考えられます。

  • スレーブの IP アドレスがマスターの構成ファイル内の IP アドレスと一致しません。
  • スレーブ マシンには仮想ネットワーク カードがあり、IP アドレスが正しくありません。
  • ファイアウォールまたはセキュリティ ソフトウェアが RMI 通信をブロックしています。

解決:

  • スレーブの IP アドレスがマスターの構成ファイル内の IP アドレスと一致しているかどうかを確認します。
  • 不一致が見られない場合は、スレーブマシンに仮想ネットワークアダプタが設定されているかどうかを確認してください。ネットワークアダプタを無効にし、Jmeter-server.bat を起動して正常に動作するかどうかを確認してください。
  • ファイアウォールがオフになっているかどうかを確認してください。

注: CentOS 7 でファイアウォールを無効にするには: `firewall-cmd --state` // ファイアウォールのステータスを確認します:

 systemctl stop firewalld.service //关闭防火墙

質問4:CSVファイルのパスを設定する際に、パスが間違っていると応答がありません。

理由: JMeter が CSV ファイルを読み取るときに、ファイルが見つからない場合は、エラーを報告せずに無期限に待機します。

解決策: 相対パスを使用して CSV ファイルに名前を付けます。つまり、CSV ファイルを bin ディレクトリに直接配置し、JMeter パスにファイル名を直接入力します。

質問 5: (Linux) ポート 1099 がデフォルトで使用されている場合、使用中のポートを閉じるにはどうすればよいですか?

理由: JMeter が分散テストに RMI を使用する場合、登録ポートとしてポート 1099 を使用する必要があります。このポートが他のプログラムによって使用されていると、jmeter-server の起動に失敗したり、スレーブが接続に失敗したりする可能性があります。

解決:

現在のすべての TCP ポートを表示するには、次のコマンドを実行します。

 netstat -ntlp

すべてのポート 1099 の使用状況を確認するには、次のコマンドを実行します。

 nestat -ntulp |grep 1099

ポート 1099 を使用するプログラムの PID を確認するには、次のコマンドを実行します。

 lsof -i:1099

プロセスを強制終了して、次のコマンドを実行します。

 kill -9 1109 //kill掉该进程

質問6: スレーブを使用してデータを送信した後、長時間応答がない場合はどうなるのでしょうか?

原因: 次の理由が考えられます。

  • 送信中のデータには CSV パラメータ ファイルが含まれていますが、このファイルはスレーブ マシンの bin ディレクトリにありません。
  • 作成した TCP サンプラーでは、「TCPClient クラス名」プロパティに次のプロトコルが追加されていません: org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

解決:

  • 送信されたデータに CSV パラメータ ファイルが存在するかどうかを確認し、そのファイルがスレーブ マシンの bin ディレクトリに存在するかどうかを確認します。
  • 作成された TCP サンプラーの「TCPClient classname」プロパティにプロトコル org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl が追加されているかどうかを確認します。

質問 7: JMeter が文字化けしたデータを返す場合はどうすればよいですか?

原因: JMeter のデフォルトのエンコーディングがサーバーのエンコーディングと一致していないため、データ変換が失敗する可能性があります。

解決策: JMeter インストール パスの bin ディレクトリで、ファイル jmeter.properties を開き、Sampleresult.default.encoding の値を utf-8 に変更します。

質問8: JMeterを起動すると、次のエラーが発生します: VMの初期化中にエラーが発生しました。オブジェクトヒープに十分なスペースを予約できませんでした。errorlevel=1

原因: JMeter のデフォルトのヒープ サイズがテスト負荷をサポートするのに不十分なため、メモリ オーバーフローが発生する可能性があります。

解決:

  • bin ディレクトリの jmeter.bat ファイルを開き、set HEAP を見つけて、set HEAP=-Xms128m -Xmx512m を set HEAP=-Xms512m -Xmx512m に変更します。
  • jmeter.bat を再起動するだけです。

質問 9: データベース API テストに JMeter を使用する場合、getApps(int nu, int appID[]) のように、データベース インターフェイスで配列をパラメーターとして渡すと、実際の使用時に構文エラーが報告されます。

原因: JMeter のデフォルトのパラメータ区切り文字はコンマですが、配列パラメータはセミコロンで区切る必要があるため、構文エラーが発生する可能性があります。

解決策: JMeter のデータベース接続構成で、パラメータ区切り文字をセミコロンに変更します。

質問 10: Windows コントローラ上の JMeter でパラメータ化用の CVS ファイルを追加する場合、ロード マシンにファイルがない場合、リモート起動は失敗します (CVS ファイル内の変数が参照されていない場合でも)。

理由: これは、JMeter がリモートで起動するときにパラメータ ファイルの存在を確認し、ファイルが存在しない場合はエラーを報告するためと考えられます。

解決策: 同じパラメータ ファイルをロード マシンに追加するか、制御マシン上のパラメータ ファイルへの参照を削除します。