---
title: "jmeter負荷試験 | grasys blog"
url: "https://blog.grasys.io/post/tsunoda/jmeter"
description: "こんにちは角田(tsunoda)です。 毎日暑いですね〜。 先日jmeterによる負荷試験を行ったので、ハマった部分などをご紹介します。 jmeterインストール 今回はjmeter-3.3を入れました。 ローカルのmacに入れてみる。 jmeterのソースが置いてあるページから3.3をインストールしました。 htt…"
---

# jmeter負荷試験

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[tsunoda](/authors/tsunoda/)
-   公開日：2018年8月2日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Apache JMeter](/tags/apache-jmeter/)

![jmeter負荷試験](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちは角田(tsunoda)です。  
毎日暑いですね〜。

先日jmeterによる負荷試験を行ったので、ハマった部分などをご紹介します。

## jmeterインストール

今回はjmeter-3.3を入れました。  
ローカルのmacに入れてみる。  
jmeterのソースが置いてあるページから3.3をインストールしました。  
`https://archive.apache.org/dist/jmeter/binaries/`  
上記URLよりapache-jmeter-3.3.tgzをダウンロード。  
そしてインストールすると、  
apache-jmeter-3.3/というディレクトリができます。  
jmeter-3.3を起動

Plain textcontent\_copy

```
apache-3.3/bin/jmeter
```

起動するかと思いきや!  
javaのバージョンが違っていたのでjavaの1.8.0を入れました。  
javaの過去のバージョンをインストールして、  
以下を.bashrcに追加して、`source ~/.bashrc`

Plain textcontent\_copy

```
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8"`
PATH=$JAVA_HOME/bin:$PATH
```

いざ起動！  
`apache-meter-3.3/bin/jmeter`  
動きました。  
使い方は詳しく説明してくれているサイトがあるので、  
参考URLに貼っておきます。

今回は、

Plain textcontent\_copy

```
・ 記憶コントローラを使ってシナリオ作成
・ 自分がハマった部分
・ 今回の負荷試験のやり方
・ 先輩に教わった小技
```

を紹介します。

## 記憶コントローラを使ってシナリオ作成

jmeterを利用して、たくさんの画面にアクセスするシナリオを実施する場合、  
画面の数だけサンプラーでHTTPリクエストを登録する必要があります。  
これは、画面が多ければ多いほど面倒です。。  
ところがどっこい、記憶コントローラを使うことで、 ブラウザで操作した動きをシナリオとして記憶してくれます！  
　  
記憶コントローラでシナリオを作成してみましょう。

![記憶コントローラを使ってシナリオ作成の画面（1）](/_astro/01-11-1-1024x591-6713dc7a.llV2sS6T_WipgU.webp)

図のようにワークベンチから選択します。  
次に、対象となるコントローラの欄から、  
ワークベンチ＞記憶コントローラ  
を選択します。

![記憶コントローラを使ってシナリオ作成の画面（2）](/_astro/02-12-1-1024x749-4ca50d76.DsnUy9Gu_lEMO9.webp)

ブラウザのプロキシ設定をします。

![記憶コントローラを使ってシナリオ作成の画面（3）](/_astro/03-13-1-1024x422-922eed01.CGl5ER4m_13CSJO.webp)

HTTPプロキシサーバをstart!!  
そのままアクセス先を最後までスクロールすると全て取得できます。  
gif,css,jsファイルも入ります。  
　  
注意点としては、  
HTTPプロキシサーバを停止しない限り記憶し続ける点です。  
やたらとスクロールしちゃうと取得し過ぎるので気をつけなはれや！

それから、cssやjsファイルが取得できない事があります。  
ローカルのキャッシュのようです。  
シークレットモードでアクセスすると取得できます。

記憶コントローラを使ってシナリオを作成すると、  
より実際のアクセスに近い状況で負荷試験ができるので、  
結果もよりリアルなものを取れて便利だと思います。

### ハマった事-jmxファイルを実行できない

テスト計画を作成し、動作確認後、 保存したjmxファイルを実行したら、実行できませんでした。  
以下のエラーが出ました。

Plain textcontent\_copy

```
$ apache-jmeter-3.3/bin/jmeter -n -t sample.jmx
Creating summariser <summary>
Created the tree successfully using sample.jmx
Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class!
```

これはなかなか苦戦しました。

結論を言うと、親要素が無い不完全なjmxファイルを作成していたからです。  
回避するためには、

Plain textcontent\_copy

```
ファイルメニューの「テスト計画に名前をつけて保存」を使う。
テスト計画を選択した状態で「別名で保存」ボタンを押す。
```

自分はまず「テスト計画を保存」を利用。  
その後、条件を変更したので「別名で保存」を使いました。  
ここがミスでした。

![ハマった事-jmxファイルを実行できないの画面](/_astro/04-14-1-d6f7e95e.BGp6yP-8_1uGrBT.webp)

実はこの「別名で保存」は、`選択されたものを別名で保存する`という意味の保存でした。  
子要素を選択した状態で「別名で保存」をすると部分的な保存になってしまうのでした。  
思っていた「別名で保存」とは違った。。  
ファイルメニューの「テスト計画に名前をつけて保存」を使えば大丈夫です。

### 負荷試験の方法

今回はjmxファイルディレクトリを作り、そこにファイルを置いて、  
同じディレクトリにlogファイルが作成されるようにスクリプトを作って負荷試験を行いました。

Plain textcontent\_copy

```
$ ls jmeter/
  sample.jmx top.jmx test.jmx run.sh
```

下図のようにthread、ramp、loopを変数にして、jmxファイルを作成しています。  
スクリプト(run.sh)の引数で毎回指定できるように組んでいます。

![負荷試験の方法の画面](/_astro/05-15-1-1024x636-2e3c1622.D9pxGBkY_RDiH0.webp)

Plain textcontent\_copy

```
$ ./run.sh sample.jmx 10 10 10
```

という感じです。  
run.shの中身ではこのコマンドが実行されています。(一部抜粋)

Plain textcontent\_copy

```
~/apache-jmeter-3.3/bin/jmeter -n -t ${jmx_file} -l result_file/result-20180730 -e -o log/log-20180730 -JLoop=$2 -JThread=$3 -JRamp=$4
```

結果をfileに書き出しています。 引数でスレッド数などを変えて指定URLの負荷試験を行いました。

### 小技

小技を1つご紹介します。

**テスト計画に他のファイルも追加して、1度に全部ではなく、１つずつ全部流したい。**

そんな時はこうします。  
jmeterの編集を押す→併合（マージ）を押して、追加するファイルを選択。

![jmeterの編集を押す→併合（マージ）を押して、追加するファイルを選択の画面](/_astro/06-16-1-1cb379b1.whKqHfKd_V4R4s.webp)

テスト計画を選択して、「各スレッドグループを別々に実行」にチェックを入れます。

![JMeterで各スレッドグループを別々に実行する設定画面](/_astro/07-17-1024x817-dad7a4a6.C9ohbGzg_15fSDd.webp)

こうすると１つずつ流してくれます。

またこの時、結果を１つの統計レポートに入れたければ、  
それぞれのスレッドグループから削除して、 スレッドグループと同じ階層に統計レポートを置く。  
すると全部その統計レポートに入ります。  
緑の実行ボタンを押せば、１スレッドグループずつ全部やってくれます。

![JMeterでスレッドグループを順番に実行する画面](/_astro/08-18-1024x788-1f8188dd.B5E8-E1Y_OgLgo.webp)

スレッドグループ毎に流してくれて、かつ結果を１つにまとめてくれるので、  
データの共有などがしやすくて良いですね！

## まとめ

あまりjmeterは触った事がなかったのですが、 負荷試験ツールとしては分かりやすいツールだと思いました。  
grafanaなどと合わせて使うとより負荷の状況が明確に見えますね。  
jmeterにはまだ他にも機能がありそうなので、 もう少し掘って♂勉強してみようかと思います。

参考URL [jmeterシナリオ作成](http://naoberry.com/jmeter/static-senario/)

## この記事を書いた人

[![](/_astro/tsunoda.CrA_Wh9V_Z1aOeCP.webp)](/authors/tsunoda/)

### [tsunoda](/authors/tsunoda/)

tsunodaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/tsunoda/)