【Mac】「JMeterが予期しない理由で終了しました」の対策【JMeter】

# 環境
- MacBook Pro（Apple M2 Max）
- macOS Sonoma 14.1.1（23B81）


# 背景
- homebrewでJDKとJMeterをインストールしてJMeterを起動しようとしたが、`JMeterが予期しない理由で終了しました`との表示が出て起動が失敗した
- ![スクリーンショット 2025-02-14 15.58.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639188/42a87f8a-4fdb-4722-8b41-c9abb459f9e7.png)


- こちらの記事とおそらく同じ事象
  - https://qiita.com/koshikawa/items/6e49067f69bf52884c0a

- 調べたところ、Macにおいて一部JDKはJmeterとの相性が悪いらしいので、別のJDKをインストールするのが良さそう
  - https://github.com/apache/jmeter/issues/6083#issuecomment-1765484046

- またAdoptOpenJDK は2024年12月に公式にサポートされなくなり、Homebrewからも削除されたためbrewでインストールができない

- よって、Amazon CorrettoというJDKをインストールして、これでJMeterを起動する

- なおjenvなどのバージョン管理ツールは、本記事では使わずにインストールする



# 作業前の状態
- JDK未インストール
```
~ % java --version           
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
```
- jmeter未インストール
```
~ % jmeter --version                                   
zsh: command not found: jmeter
```


# JDK(Amazon Coretto 17)のインストール
- こちらを参考にインストールする https://banbara-studio.hatenablog.com/entry/2023/06/19/045410
  - [AWS ダウンロードリンク](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-17-ug/downloads-list.html)
    - ローカルマシンのチップがAppleSiliconなら「macOS aarch64」のJDKのpkgをダウンロードする
  - [AWS インストール手順](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-17-ug/macos-install.html)
    - DLしたpkgがインストーラなので、画面に従ってインストールする
    - `export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home` を実行してzshにパスを通す


- 以下の通りにJDKがインストールできていればOK
```
~ % java -version
openjdk version "17.0.14" 2025-01-21 LTS
OpenJDK Runtime Environment Corretto-17.0.14.7.1 (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.14.7.1 (build 17.0.14+7-LTS, mixed mode, sharing)
~ % 
```

# JMeterのインストール
- homebrewで標準パッケージをインストールする
```
~ % brew install jmeter
```
- jmeter 5.6.3がインストールされた
```
~ % jmeter --version
WARNING: package sun.awt.X11 not in java.desktop
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
    _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____
   / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \
  / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |
 / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <
/_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.6.3

Copyright (c) 1999-2024 The Apache Software Foundation

~ % 
```



# JMeterの設定ファイルの修正
- このままjmeterコマンドで起動しても、先述の`JMeterが予期しない理由で終了しました`との表示で起動に失敗する

>[引用](https://qiita.com/koshikawa/items/6e49067f69bf52884c0a) jmeter起動コマンドがJAVA_HOMEを固定していたためにAdoptOpenJDKをインストールするだけではJMeterのJavaは切り替わらず、OracleのJavaで起動し続けていたためのように見えます。 

>[引用](https://github.com/apache/jmeter/issues/6083#issuecomment-1752536209) 以下のように編集すると (Homebrew によって提供される JDK ではなく、自分で設定した JDK が使用されるようになります)、動作します。`#!/bin/bash
exec "/opt/homebrew/Cellar/jmeter/5.6.2/libexec/bin/jmeter"  "$@"`

- とのことなので、jmeterが起動する時のJDKを、先ほどインストールしたAmazon Coretto 17で起動できるように修正する

- 設定ファイルを開き、(`5.6.3`のバージョン部分は自身のjmeterバージョンに合わせること)
```
~ % vim /opt/homebrew/Cellar/jmeter/5.6.3/bin/jmeter 
```
- 中身を以下のように修正する(`5.6.3`のバージョン部分は自身のjmeterバージョンに合わせること)
```
#!/bin/bash
exec "/opt/homebrew/Cellar/jmeter/5.6.3/libexec/bin/jmeter"  "$@"
```

# JMeter起動
```
~ % jmeter
WARNING: package sun.awt.X11 not in java.desktop
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

```

- 起動成功
- ![スクリーンショット 2025-02-14 15.57.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639188/c2d95563-5d2f-4773-a42c-53241c3c111b.png)


以上