JMeterが何故かIPv6で通信される
しばらく前にやった負荷テスト時にいまいち負荷量が伸びなく、試行錯誤と調査をしているうちに通信が何故か全てIPv6だったと発覚
それが負荷量の伸びない原因の全てではなかったが原因の1つではないかと推測し対応を行う
なのでそのときの作業の備忘録
JavaやJMeterのインストール作業手順等は割愛します
Javaのバージョン確認
# java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
JMeterのバージョン
5.5
jmxファイル作成(シナリオ作成)の環境
windows10
JMeter実行の環境
master,slaveともにAWSのEC2にて作成
centos7.5
通信確認
JMeterを実行中に sudo su - をしてからlsofコマンド
# sudo su -
# lsof -i:443 -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 3112 root 182u IPv6 4998384 0t0 TCP ip-XXXXXXXXXXX.compute.internal:62954->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 183u IPv6 4998385 0t0 TCP ip-XXXXXXXXXXX.compute.internal:62970->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 184u IPv6 4998386 0t0 TCP ip-XXXXXXXXXXX.compute.internal:62986->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 185u IPv6 4998403 0t0 TCP ip-XXXXXXXXXXX.compute.internal:63002->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 186u IPv6 4997786 0t0 TCP ip-XXXXXXXXXXX.compute.internal:63018->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 190u IPv6 4998404 0t0 TCP ip-XXXXXXXXXXX.compute.internal:63030->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 191u IPv6 4998419 0t0 TCP ip-XXXXXXXXXXX.compute.internal:63044->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 3112 root 192u IPv6 4998422 0t0 TCP ip-XXXXXXXXXXX.compute.internal:63060->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
全部IPv6
jmeterファイル修正
apache-jmeter-5.5/bin/jmeter ファイル
### 修正前 ###
if [ -z "${JMETER_COMPLETE_ARGS}" ]; then
ARGS="$JAVA9_OPTS $SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS $JMETER_LANGUAGE $RUN_IN_DOCKER"
else
ARGS=""
fi
"$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
export JVM_ARGS="-Djava.net.preferIPv4Stack=true"
上記の1行付け足す
### 修正後 ###
if [ -z "${JMETER_COMPLETE_ARGS}" ]; then
ARGS="$JAVA9_OPTS $SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS $JMETER_LANGUAGE $RUN_IN_DOCKER"
else
ARGS=""
fi
export JVM_ARGS="-Djava.net.preferIPv4Stack=true"
"$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
system.propertiesファイルの修正
apache-jmeter-5.5/bin/system.properties
### 修正前 ###
#java.net.preferIPv4Stack=false
#java.net.preferIPv6Addresses=false
#networkaddress.cache.ttl=-1
#networkaddress.cache.negative.ttl=10
java.net.preferIPv4Stack=true
java.net.preferIPv6Addresses=false
java.net.preferIPv4Addresses=true
この3行を付け足す
### 修正後 ###
#java.net.preferIPv4Stack=false
#java.net.preferIPv6Addresses=false
#networkaddress.cache.ttl=-1
#networkaddress.cache.negative.ttl=10
java.net.preferIPv4Stack=true
java.net.preferIPv6Addresses=false
java.net.preferIPv4Addresses=true
再度通信確認
ファイル修正が終わったら設定を反映させるためにJMeterを再起動させておきます(1敗)
そして修正前と同様にJMeterを実行中に sudo su - してからlosfコマンド
# sudo su -
# lsof -i:443 -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12575 root 183u IPv4 5007316 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50122->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 12575 root 185u IPv4 5007317 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50126->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 12575 root 187u IPv4 5008545 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50154->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 12575 root 188u IPv4 5007318 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50138->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 12575 root 189u IPv4 5008546 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50166->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
java 12575 root 190u IPv4 5007319 0t0 TCP ip-XXXXXXXXXXX.compute.internal:50170->XXXXXXXXXXX.compute.amazonaws.com:443 (ESTABLISHED)
IPv4になりました
書いておいてなんですが、何故IPv6になっていたかの原因を調べるほうが大事な気がします
https://xy2401.com/local-docs/apache.zh/jmeter-5.2/changes_history.html
jmeterの変更履歴にHTTPCookieManagerでHC3とHC4が切り替えられるようになったとの内容がありますが、Jmeterを開いても該当のセレクトボックスが見当たりません
jmxファイルを直接エディタ等で開いてもやはり見当たりません
こちらは時間を見つけてまた調べます