JMeter入門:Docker環境でJMeterの実行環境を構築する -Vol.2j-

スポンサーリンク
JMeter入門:Docker環境でJMeterの実行環境を構築する -Vol.2- 環境構築
JMeter入門:Docker環境でJMeterの実行環境を構築する -Vol.2-
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Docker環境でJMeterの実行環境を構築する方法について解説しています。

スポンサーリンク

背景

JMeterを利用した負荷試験をする機会がありましたので、その時の内容を備忘として記事に残しました。

前回記事の内容

前回は、下記のファイル一覧の jmeter/Dockerfile を解説しました。本記事では、jmeter/entrypoint.sh について解説しています。

        new file:   jmeter/Dockerfile
        new file:   jmeter/entrypoint.sh
        new file:   jmeter/test.sh
        new file:   jmeter/tests/trivial/plan.jmx
        new file:   Makefile
        new file:   compose.yml

jmeter/entrypoint.sh

#!/bin/bash

# Install jmeter plugins available on /plugins volume
if [ -d "${JMETER_CUSTOM_PLUGINS_FOLDER}" ]
then
    for plugin in "${JMETER_CUSTOM_PLUGINS_FOLDER}"/*.jar; do
        cp "${plugin}" "${JMETER_HOME}/lib/ext"
    done;
fi

# Execute JMeter command
set -e
freeMem=$(awk '/MemAvailable/ { print int($2/1024) }' /proc/meminfo)

[[ -z ${JVM_XMN} ]] && JVM_XMN=$(($freeMem/10*2))
[[ -z ${JVM_XMS} ]] && JVM_XMS=$(($freeMem/10*8))
[[ -z ${JVM_XMX} ]] && JVM_XMX=$(($freeMem/10*8))

export JVM_ARGS="-Xmn${JVM_XMN}m -Xms${JVM_XMS}m -Xmx${JVM_XMX}m"

echo "START Running Jmeter on $(date)"
echo "JVM_ARGS=${JVM_ARGS}"
echo "jmeter args=$@"

# Keep entrypoint simple: we must pass the standard JMeter arguments
EXTRA_ARGS=-Dlog4j2.formatMsgNoLookups=true
echo "jmeter ALL ARGS=${EXTRA_ARGS} $@"
jmeter ${EXTRA_ARGS} $@

echo "END Running Jmeter on $(date)"

このスクリプトは、Bashで書かれたJMeterのプラグインをインストールし、JMeterのコマンドを実行するためのものです。

JMeterのカスタムプラグインのインストールについて

  1. if [ -d "${JMETER_CUSTOM_PLUGINS_FOLDER}" ] この行は、${JMETER_CUSTOM_PLUGINS_FOLDER}という環境変数で指定されたディレクトリが存在するかどうかをチェックします。-dオプションは、指定されたパスがディレクトリであるかを確認するためのものです。
  2. then このキーワードは、前のif条件が真(つまりディレクトリが存在する)の場合に実行されるコマンドを導入します。
  3. for plugin in "${JMETER_CUSTOM_PLUGINS_FOLDER}"/*.jar; do このループは、${JMETER_CUSTOM_PLUGINS_FOLDER}ディレクトリ内の.jar拡張子を持つ全てのファイルに対して繰り返し処理を行います。*.jarは、.jarで終わる全てのファイルにマッチします。
  4. cp "${plugin}" "${JMETER_HOME}/lib/ext" このコマンドは、見つかった各プラグイン(.jarファイル)を${JMETER_HOME}/lib/extディレクトリにコピーします。${JMETER_HOME}はJMeterがインストールされているディレクトリを指します。
  5. done; このキーワードはforループの終わりを示します。
  6. fi このキーワードはif条件文の終わりを示します。

要するに、このスクリプトは${JMETER_CUSTOM_PLUGINS_FOLDER}ディレクトリが存在する場合に限り、その中の全ての.jarファイルをJMeterのlib/extディレクトリにコピーするというものです。これにより、JMeterに新しいプラグインを追加することができます。もし${JMETER_CUSTOM_PLUGINS_FOLDER}ディレクトリが存在しなければ、何も行われません。このスクリプトは、通常、JMeterのセットアップやカスタマイズの一環として使用されます。

JMeterの実行について

  1. set -e: このコマンドは、スクリプトがエラーに遭遇した場合に直ちに終了するように設定します。これにより、エラーが発生した時点でスクリプトが停止し、デバッグが容易になります。
  2. freeMem=$(awk '/MemAvailable/ { print int($2/1024) }' /proc/meminfo): このコマンドは、システムの利用可能なメモリ量をキロバイト単位で取得し、freeMem変数に格納します。
  3. [[ -z ${JVM_XMN} ]] && JVM_XMN=$(($freeMem/10*2)): このコマンドは、JVM_XMN環境変数が未設定(空)である場合に、利用可能なメモリの10分の2をJVM_XMNに設定します。
  4. [[ -z ${JVM_XMS} ]] && JVM_XMS=$(($freeMem/10*8)): このコマンドは、JVM_XMS環境変数が未設定(空)である場合に、利用可能なメモリの10分の8をJVM_XMSに設定します。
  5. [[ -z ${JVM_XMX} ]] && JVM_XMX=$(($freeMem/10*8)): このコマンドは、JVM_XMX環境変数が未設定(空)である場合に、利用可能なメモリの10分の8をJVM_XMXに設定します。
  6. export JVM_ARGS="-Xmn${JVM_XMN}m -Xms${JVM_XMS}m -Xmx${JVM_XMX}m": このコマンドは、JVMの起動引数を設定し、それを環境変数JVM_ARGSにエクスポートします。
  7. echo "START Running Jmeter on $(date)": このコマンドは、JMeterの実行開始時刻を表示します。
  8. echo "JVM_ARGS=${JVM_ARGS}": このコマンドは、設定されたJVM引数を表示します。
  9. echo "jmeter args=$@": このコマンドは、スクリプトに渡されたJMeterの引数を表示します。
  10. EXTRA_ARGS=-Dlog4j2.formatMsgNoLookups=true: このコマンドは、JMeterの追加引数を設定します。この引数は、Log4j2の脆弱性を回避するために使用されます。
  11. echo "jmeter ALL ARGS=${EXTRA_ARGS} $@": このコマンドは、JMeterに渡される全ての引数を表示します。
  12. jmeter ${EXTRA_ARGS} $@: このコマンドは、設定された引数を使用してJMeterを実行します。
  13. echo "END Running Jmeter on $(date)": このコマンドは、JMeterの実行終了時刻を表示します。

このスクリプトは、JMeterを安全かつ効率的に実行するための環境設定と、実行コマンドを含んでいます。スクリプトの実行により、JMeterは適切なJVM引数を使用して実行され、その開始時刻と終了時刻が記録されます。また、Log4j2のセキュリティ対策も含まれています。.

おわりに

今日は、Docker環境でJMeterの実行環境を構築する方法について解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました