Apache JMeterで負荷調査してみた


本記事は「[ TTDC Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ttdc)」１８日目の記事です。

# はじめに

サイト利用者が増えたり、一度に多くのアクセスが集中すると、サイトが正常に動かなくなるリスクがあることから負荷調査を実施することにしました。

本記事では、この負荷調査で使用したツールや使い方、評価結果ついて紹介します。


# 負荷検査ツール Apache JMeterについて

JMeterとは、Webサービスを中心にさまざまなアプリケーションの負荷テストおよびパフォーマンスの計測が行えるツールです。Apacheソフトウェア財団によって開発されているJavaアプリケーションで、正式名称は「Apache JMeter」です。オープンソースであることや利用制限がないこと、多機能であることから、システムの性能測定に広く利用されています。


[ソフトウェアのダウンロードはこちら](https://jmeter.apache.org/download_jmeter.cgi)


## 負荷検査ツール Apache JMeterの特徴

オープンソースライセンス
多くのアプリケーションテストが可能

- Web：HTTP、HTTPS（Java、NodeJS、PHP、ASP.NET など）<br> 
- Webサービス：SOAP/REST<br>
- FTP<br> 
- JDBC経由のデータベース<br> 
- LDAP<br> 
- メール：SMTP、POP3、IMAP<br> 
- TCP<br> 
- ネイティブコマンドまたはシェルスクリプト<br> 
- Javaオブジェクト

## 利用方法

一般的に使われるOSSということもあり、ネットで検索するとたくさん出てきます

インストール方法(参考)
https://baremetal.jp/blog/2022/12/27/1241/

利用方法(参考)
https://tech-blog.rakus.co.jp/entry/2017/08/24/111332

<日本語化>
ダウンロードした「jmeter.bat」を直接編集

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/55960400-6b42-b4ea-afa3-bfb406d0f1f5.png)

language"us"⇒"ja"とresion"EN"⇒"JP"へ変更
![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/1a97afa8-3afe-2d36-2ead-a4963ede7d39.png)

「jmeter.bat」を実行すると立ち上がります
![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/569ab118-5089-5e28-77b5-fdbc5c96c591.png)


## 負荷検査のシナリオ、評価基準を決める

検査の概要やシナリオ及び評価基準を決定する。
今回は以下のような基準で評価を実施しました。

<評価基準>


| 項目            | 基準値                                                |
|-----------------|-------------------------------------------------------|
| 応答時間        | 95%のリクエストが 2秒以下                             |
| エラーレート    | 5%以下                                               |
| サーバーリソース | CPU使用率が 80%以下、メモリ使用率が 90%以下、ディスク使用率が 70%以下 |


## Apache JMeterで検査パターンを作成する


### スレッドグループの設定
初めにスレッドグループを作成しシナリオの繰り返し回数を指定します。

![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/49b67edb-af3e-48e4-17de-0ff0a97a0dd3.png)



- スレッドグループでの指定内容<br> 
- スレッド数：同時実行数<br> 
- Ramp-Up期間(秒)：1つのシナリオの実行時間<br> 
- ループ回数：１つのシナリオの繰り返し回数

### シナリオの設定

サイト表示やキーワードを使った検索結果などHTTPリクエストの設定を行う

![image-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/ef4be09a-1290-12f9-e52c-b9f902ebc098.png)


## 負荷検査を実施する

### GUI上で実行する
![image-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/115d6e44-05be-4827-fa92-b72dab3e7fd6.png)


※最終的な負荷検査は下で説明するコマンドラインから実行すること

### コマンドライン上から実行
パターン作成時につくった「jmxファイル」をコマンドラインから実行する
![image-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/eefa39a3-c924-7185-a321-c0e597a10970.png)


## 結果を確認する

負荷検査を実行後、完了するとレポートファイル「jtl」やログファイル「log」ファイルが出力される
JMeter上から負荷検査の結果を確認する。

GUI上で追加->リスナー->結果を表で表示
![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/36e79b28-3df0-234c-7b59-89bf6cf06f27.png)


レポートファイル「jtl」を設定し結果を確認する

<表で確認>
![image-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/5aa737c5-53d6-d08e-5799-02ac80cbaf2a.png)

Latency：レスポンス時間に注目する

<グラフで確認>
![image-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3947880/85713375-d2af-3dc3-44b4-d87536e0a500.png)


## 結果をまとめる
以下のような感じで評価指標と比較し結果をまとめました
| 項目                | 基準値                                                                                 | 計測値(%) | 判定 |
|---------------------|---------------------------------------------------------------------------------------|-----------|------|
| 応答時間           | 95%のリクエストが2秒以下 → 2秒以下のリクエストが全体の95％以上                          | 99.44％   | 〇    |
| エラーレート        | 5%以下                                                                                | 0.00％    | 〇    |
| サーバーリソース    | CPU使用率が80%以下、メモリ使用率が90%以下、ディスク使用率が70%以下                      |           |      |
| 開発AP-メモリ       |                                                                                       | 68.53％   | 〇    |
| 開発AP-CPU          |                                                                                       | 29.90％   | 〇    |
| 開発DB-メモリ       |                                                                                       | 11.77％   | 〇    |
| 開発DB-CPU          |                                                                                       | 6.80％    | 〇    |


## さいごに
今回の負荷検査を通じて、システムの性能や限界点を把握する重要性を改めて認識しました。性能評価や改善のプロセスを定期的に行い、課題を早期に発見・解決することが不可欠です。今回の結果をもとに、さらなる最適化と利用者にとって快適なサービス提供を目指していきます。