# JMeter 導入

## JMeter 導入

テスト計画はローカルのMacでGUI上で作成を行い、実際に負荷をかけることはAmazon Linux AMI上からCLIで実行する手順となります。 実際に負荷をかけることはGUIからの実行は結果が不正確になることもあり非推奨なのでCLIで実行することを公式から推奨しています。 <http://jmeter.apache.org/usermanual/get-started.html>

```
Don't run load test using GUI mode !
```

### JMeterのインストール

#### Mac

インストール後、起動

```
$ brew install jmeter
$ jmeter
```

#### Amazon Linux AMI

最新が5.1.1のものであることを確認 <http://ftp.meisei-u.ac.jp/mirror/apache/dist/jmeter/binaries/>

```
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/jmeter/binaries/apache-jmeter-5.1.1.zip
$ unzip apache-jmeter-5.1.1.zip
$ sudo mkdir /usr/local/jmeter
$ sudo mv apache-jmeter-5.1.1 /usr/local/jmeter/
$ cd /usr/local/jmeter/apache-jmeter-5.1.1/bin/
```

jmeterファイルを編集

```
$ vim jmeter
```

159行目の以下の箇所をコメントアウト

```
## : ${HEAP:=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m}
```

Java 8のインストール

```
$ tar xvf jdk-8u221-linux-x64.tar.gz 
$ sudo mv jdk1.8.0_221/ /usr/local/src/
$ export PATH=/usr/local/src/jdk1.8.0_221/bin/:$PATH
$ export JAVA_HOME=/usr/local/src/jdk1.8.0_221
```

更新できたことを確認

```
$ java -Xmx16M -version
java version 1.8.0_221
```

### 動作確認

#### テスト計画作成

GUIで以下の内容でテスト計画作成 Thread Groupでリクエスト元のユーザーを想定した設定を行います。 - Thread Group Number of Threads (users): 1000 Ramp-Up Period (in seconds): 3600 Loop Count: Forever

Thread GroupからSamplerでHTTP Requestの設定を行い、リクエスト内容の設定を行います。 - HTTP Request Protocol: https Server Name or IP: alb.test.hayashier.com

結果確認のためListenerで例えば以下を追加します。

* View Results Tree
* View Results in Table
* Graph Results

#### 負荷試験を実行

作成したテスト計画となるjmxファイルをJMeterを実行するホストへ配置。 以下のコマンドで実行。

```
$ ./jmeter -n -t ~/test.jmx -l log.jtl
```

GUI上で、結果を確認するためにはListerでGraph ResultsやView Results Tree,View Results in Tableなど確認結果の形式を追加して、Filenameでログ出力したjtlの形式のファイルの読込を行って確認することができます。

### エラー

#### Unrecognized VM option 'MaxMetaspaceSize=256m'

jmeterファイルの159行目の以下の箇所をコメントアウト

```
## : &quot;${HEAP:=&quot;-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m&quot;}&quot;
```

#### Exception in thread main java.lang.UnsupportedClassVersionError: org/apache/jmeter/NewDriver : Unsupported major.minor version 52.0

```
$ java -version
java version &quot;1.7.0_211&quot;
```

Java 8にアップデート

#### Error occurred during initialization of VM

64bit環境に対して32bitでインストールしていた

```
$ sudo java -d64 -version
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
```

<https://qiita.com/sykx\\_16g/items/16f1712580c2e7c81080>

#### Error occurred during initialization of VM; Could not reserve enough space for object heap

```
$ tar xvf jdk-8u221-linux-x64.tar.gz 
$ sudo mv jdk1.8.0_221/ /usr/local/src/
$ export PATH=/usr/local/src/jdk1.8.0_221/bin/:$PATH

```

更新できたことを確認

```
$ java -Xmx16M -version
java version &quot;1.8.0_221&quot;
```

#### Exception in thread main java.lang.UnsupportedClassVersionError: org/apache/jmeter/NewDriver : Unsupported major.minor version 52.0

以下の設定で解消

```
$ export JAVA_HOME=/usr/local/src/jdk1.8.0_221
```

**調査過程**

jmeterファイルの最終行の192行目で以下のようにJAVA\_HOMEの環境変数を読み込んでおり、こちらのパスはJava 7のものだった

```
&quot;$JAVA_HOME/bin/java&quot; $ARGS $JVM_ARGS $JMETER_OPTS -jar &quot;$PRGDIR/ApacheJMeter.jar&quot; &quot;$@&quot;
```

### 参考

* Apache JMeter™ <https://jmeter.apache.org/>
* Apache JMeter の基本的な使い方に関して（その１） <https://marunouchi-tech.i-studio.co.jp/4529/>
* 明日楽するために使えるようになりたい。JMeterの基本的な使い方。 <https://devlog.arksystems.co.jp/2019/01/23/6596/>
* JMeterのシナリオ作成がうまくいかない！そんなときのトラブルシューティングガイド <http://tech-blog.rakus.co.jp/entry/20181030/jmeter/troubleshooting>
* JMeter <https://www.techscore.com/tech/Java/ApacheJakarta/JMeter/index/>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hayashier.gitbook.io/article/others/jmeter-get-started.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
