JMeterをLinuxに入れる① ~バージョン違いに気づかず遠回りした編~

## この記事について

JMeterをLinux(CentOS)に入れたときの体験記事を書きました。

### 2023年4月追記
文面の体裁を整えるため更新。新しい情報は何も入っていません。

## 背景
開発サーバはインターネットにつながるものの、ローカルの開発環境にはつながらない。
そのため、ローカルから開発サーバに上げたモジュールを試験するために、LinuxにJMeterを入れたかった

### 環境
Centos: 6.2
Java: 1.7
入れようとしたJMeter: **4.0** 

### 全編に対する注意点
当時のチームでの慣習なのですが、開発環境ということもありこのあたりの作業は全てrootユーザで実施してます。

## 起きたこと

### 手順
jdk→既に入ってる
jmeter→[http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries](http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries) からダウンロード
apache-jmeter-4.0.tgzをダウンロード→scpでごにょごにょ

    # tar xzf apache-jmeter-4.0.tgz
    # mkdir /usr/local/jmeter
    # mv apache-jmeter-4.0 /usr/local/jmeter
    # cd /usr/local/jmeter/

### エイリアスの登録
    vi ~/.bashrc
    PATH=$PATH:$HOME/bin:/usr/local/jmeter/apache-jmeter-4.0/bin
    source ~/.bashrc

これで動く！と思った。

### 例外①

    # /usr/local/jmeter/apache-jmeter-4.0/bin/./jmeter -v
    Unrecognized VM option 'MaxMetaspaceSize=256m'
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.

英語が読めず、一瞬思考停止する。

#### ググる
**ログの文言をググる**のは、個人的にはエンジニアの基本中の基本かなと思います。ネットがあるなら猶更。

ただし、

- 「ググった結果が意味わからない」
- 「ログどこに出てるの」
- 「ログが分かりづらすぎる」

って場合は頼れる先輩エンジニアに聞くべきだと思います。

---
そんなこんなで見つけました。JMeterじゃないけど、同じ理由でJVMが起動しない時の対処法が書かれています

https://github.com/51zero/eel-sdk/issues/58

記事にはこんなことが書いてあります。170人近い人が良いねしてます。
「had to remove -XX:MaxMetaspaceSize=256m」

とりあえず、jmeterの設定ファイルからコメントアウト

    # less /usr/local/jmeter/apache-jmeter-4.0/bin/jmeter | grep MaxMeta
    ##                    Defaults to "-Xms1g -Xmx1g -X:MaxMetaspaceSize=256m"
    #: "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"


### 例外②
エラーメッセージが変わりました

    # jmeter
    Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/jmeter/NewDriver : Unsupported major.minor version 52.0
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

バージョンが対応してないようです。
……version 52.0 って何のバージョンなんですか？Javaは1.7ですよね。

### 52の意味

StackOverflowにそれっぽいことが書いてあった

https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

これの解答によれば

Java SE 10 = 54
Java SE 9  = 53
Java SE 8  = 52
Java SE 7  = 51
(以下略))


なるほどなるほど、こいつはjava8を要求しているわけです。

### うちのサーバは？

    # java -version
    java version "1.7.0_79"

#### 超今更ですが、改めて確認

http://ftp.meisei-u.ac.jp/mirror/apache/dist/jmeter/binaries

を読み直す

    Java version
    Apache JMeter 4.0 requires **Java 8 or 9**

これが原因です。お疲れ様でした。状況的にそんなにすぐには更改できませんでした。

### で、3系はどうなの？

現在JMeterを普通にググると4系しか出てこないのですが、2.10以降もアーカイブとしては残っているみたいです。
[ここ](https://archive.apache.org/dist/jmeter/binaries/)から確認することができます。
どうせなら新しいものを使いたいので、JMeter 3系をインストール出来るか試しました。

■jmeter3.3の場合

    # jmeter
    Error: Java version is too low to run JMeter. Needs at least Java >= 1.8.0.

■jmeter3.0の場合

    # jmeter
    Error: Java version is too low to run JMeter. Needs at least Java >= 1.8.0.


## 結論
今さらJava7なんか使ってるやつは2.x使ってくださいってことみたいです。
一悶着あったけど、Java7なら**JMeter2.9**がつかえるみたいです。
そのうち、一悶着も使ってみた感想も記事に書きます

## 教訓
- ちゃんと公式サイトを読む
- バージョン違いで動かないシステムもあるので気を付けよう