【メモ】JMeter関連のノウハウ

## インストール
### JDK17
[Downloads for Amazon Corretto 17 - Amazon Corretto 17](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html)
### JMeter
[Apache JMeter - Download Apache JMeter](https://jmeter.apache.org/download_jmeter.cgi)
※　5.6.3を使用する場合のノウハウを記載

## JMeter起動パラメータ修正
JMeter展開ディレクトリのbinディレクトリにある、jmter.batの以下2か所を修正する
### 日本語化
修正前：    set JMETER_LANGUAGE=-Duser.language="**en**" -Duser.region="**EN**"
修正後：    set JMETER_LANGUAGE=-Duser.language="**ja**" -Duser.region="**JP**"

### ヒープサイズ変更
修正前：    set HEAP=-Xms**1**g -Xmx**1**g -XX:MaxMetaspaceSize=256m
修正後：    set HEAP=-Xms**2**g -Xmx**2**g -XX:MaxMetaspaceSize=256m

## JMeterプロパティ修正
### HTTPリクエストレスポンスのデフォルト文字コードをUTF-8とする
JMeter展開ディレクトリのbinディレクトリにある、jmeter.propertiesの以下のコメントアウトをはずす。
```ruby:title: HTTPリクエストレスポンスのデフォルト文字コードをUTF-8とする
# The encoding to be used if none is provided (default UTF-8 since JMeter 5.6.1)
sampleresult.default.encoding=UTF-8
```

### 結果をツリーで表示のデフォルトのレンダラーをJSONにする

※　1,210行以降の以下のサンプルの個所あたりを修正する。
修正前：view.results.tree.renderers_order=.RenderAsText,.RenderAsRegexp,.RenderAsBoundaryExtractor,.RenderAsCssJQuery,org.apache.jmeter.extractor.json.render.RenderAsJsonRenderer,.RenderAsXPath2,org.apache.jmeter.extractor.json.render.RenderAsJmesPathRenderer,.RenderAsXPath,.RenderAsHTML,.RenderAsHTMLFormatted,.RenderAsHTMLWithEmbedded,.RenderAsDocument,**.RenderAsJSON**,.RenderAsXML

修正後：view.results.tree.renderers_order=**.RenderAsJSON**,.RenderAsText,.RenderAsRegexp,.RenderAsBoundaryExtractor,.RenderAsCssJQuery,org.apache.jmeter.extractor.json.render.RenderAsJsonRenderer,.RenderAsXPath2,org.apache.jmeter.extractor.json.render.RenderAsJmesPathRenderer,.RenderAsXPath,.RenderAsHTML,.RenderAsHTMLFormatted,.RenderAsHTMLWithEmbedded,.RenderAsDocument,.RenderAsXML




```ruby:title: 結果をツリーで表示のデフォルトのレンダラーをJSONにする
# Order of Renderers in View Results Tree
# Note full class names should be used for non JMeter core renderers
# For JMeter core renderers, class names start with '.' and are automatically
# prefixed with org.apache.jmeter.visualizers
view.results.tree.renderers_order=.RenderAsJSON,.RenderAsText,.RenderAsRegexp,.RenderAsBoundaryExtractor,.RenderAsCssJQuery,org.apache.jmeter.extractor.json.render.RenderAsJsonRenderer,.RenderAsXPath2,org.apache.jmeter.extractor.json.render.RenderAsJmesPathRenderer,.RenderAsXPath,.RenderAsHTML,.RenderAsHTMLFormatted,.RenderAsHTMLWithEmbedded,.RenderAsDocument,.RenderAsXML

```

## TCP/IPチューニング
### クローズされたソケットの再利用を早くする
**参考**
[Settings that can be Modified to Improve Network Performance - BizTalk Server | Microsoft Learn](https://learn.microsoft.com/en-us/biztalk/technical-guides/settings-that-can-be-modified-to-improve-network-performance)

PowerShellの管理者モードで、以下のコマンドを実行
```ruby:title: クローズされたソケットの再利用を早くする
PS > Set-ItemProperty HKLM:SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -Name TcpTimedWaitDelay -Type DWord -Value 30
 
PS > Get-ItemProperty HKLM:SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -Name TcpTimedWaitDelay
 
TcpTimedWaitDelay : 30
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip
PSChildName : Parameters
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry

```

## 実行時の注意
- 並列度を高くして実行すると
ハイポートのソースポート番号が不足し、シナリオ実行できない。

- 定常的にハイポートをJMeter向けに開放すると、AWS CLIが実行できなくなる。
- 性能テストを行う時は開放し、終了したら閉塞する必要がある。

PowerShellの管理者モードで、以下のコマンドで設定を行える。
| 変更シーン | コマンド |
|:-----------|:-----------|
| 負荷テスト開始時（ポート開放） |  netsh int ipv4 set dynamicport tcp start=1025 num=64511 |
| 現在のポート範囲を確認  | netsh int ipv4 show dynamicport tcp  |
|  負荷テスト終了後（ポート閉塞） | netsh int ipv4 set dynamicport tcp start=49152 num=16384|

## まとめ
本稿が、JMeter関連のノウハウを知りたい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)