JMeterの通信をIPv6からIPv4にする

# 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ファイルを直接エディタ等で開いてもやはり見当たりません
こちらは時間を見つけてまた調べます