諸事情によりJmeterのGUIを動かしたかったのでMacでのインストール方法を調べると、Homebrewにあるとのことだったのでインストールした。が、ちゃんと動かなかったのでやったことをメモ。
環境
macOS 10.15.13(Catalina), JavaはOpenJDK 11.0.4, MacBook Pro Early 2015。M1 Macの新しいやつほしい。
事象
brew install jmeter
でJmeterをインストールして、jmeter
コマンドでGUIを実行。WARNING: package sun.awt.X11 not in java.desktop
とかいうのが出てるからなんとなく嫌な予感がしたが、一部の機能が動かない。具体的には File -> Open を押しても何も起こらない。(何もできねえ…)
ターミナルを見るとこんなエラーが出力されている。
Uncaught Exception java.lang.IllegalAccessError: class com.github.weisj.darklaf.ui.filechooser.DarkFilePaneUIBridge$DetailsTableModel (in unnamed module @0x4c40b76e) cannot access class sun.awt.shell.ShellFolder (in module java.desktop) because module java.desktop does not export sun.awt.shell to unnamed module @0x4c40b76e in thread Thread[AWT-EventQueue-0,6,main]. See log file for details.
なるほどわからん。ログファイルを見ろと言われているので、カレントディレクトリに生成されているjmeter.log
を見る。
2021-10-26 01:27:40,693 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main] java.lang.NoClassDefFoundError: Could not initialize class org.apache.jmeter.gui.util.FileDialoger at org.apache.jmeter.gui.action.Load.doActionAfterCheck(Load.java:75) ~[ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.AbstractActionWithNoRunningTest.doAction(AbstractActionWithNoRunningTest.java:44) ~[ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:87) ~[ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:69) ~[ApacheJMeter_core.jar:5.4.1] at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?] at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) ~[?:?] at java.awt.EventQueue$4.run(EventQueue.java:722) ~[?:?] at java.awt.EventQueue$4.run(EventQueue.java:716) ~[?:?] at java.security.AccessController.doPrivileged(AccessController.java:399) ~[?:?] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) ~[?:?] at java.awt.EventQueue.dispatchEvent(EventQueue.java:741) ~[?:?] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) [?:?] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) [?:?] at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:?] at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) [?:?] 2021-10-26 01:27:40,842 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main] java.lang.NoClassDefFoundError: Could not initialize class org.apache.jmeter.gui.util.FileDialoger at org.apache.jmeter.gui.action.Load.doActionAfterCheck(Load.java:75) ~[ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.AbstractActionWithNoRunningTest.doAction(AbstractActionWithNoRunningTest.java:44) ~[ ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:87) ~[ApacheJMeter_core.jar:5.4.1] at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:69) ~[ApacheJMeter_core.jar:5.4.1] at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?] at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) ~[?:?] at java.awt.EventQueue$4.run(EventQueue.java:722) ~[?:?] at java.awt.EventQueue$4.run(EventQueue.java:716) ~[?:?] at java.security.AccessController.doPrivileged(AccessController.java:399) ~[?:?] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) ~[?:?] at java.awt.EventQueue.dispatchEvent(EventQueue.java:741) ~[?:?] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) [?:?] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) [?:?] at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) [?:?] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:?] at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) [?:?]
なるほどわからん(2分ぶり2回目)。とりあえずorg.apache.jmeter.gui.util.FileDialoger
がクラスパスにないんだろうけどどうすればいいやら。
解決策
エラーメッセージ等でしばらくググって色々試したけどどうも解決できず。Javaのバージョン下げろとか上げろとか色々書いてあったので、jenvを入れて8とか17とかも試してみたけど変わらず。
こいつはちょっとヤクすぎる(yak shavingすぎる)なと感じ始めたので、別のアプローチを試すことに。[Jmeter公式]に行くとバイナリをダウンロードできるので、これをダウンロードしてみることに。その間にhomebrew版は消しておく。
大体以下のようなコマンドを打った。
$ brew uninstall jmeter Uninstalling /usr/local/Cellar/jmeter/5.4.1... (2,645 files, 124.4MB) # 一応Checksumを計算してみる。ちゃんと合ってるっぽい。 $ shasum -a 512 apache-jmeter-5.4.1.tgz bfc0faa84769b58c1fd498417b3a5c65749f52226bd6e3533f08ca7ea4a3798bb8d2cbd7091b443dd6837f3cbea5565c3c18e6497b40bec95616bf44dfdf590d apache-jmeter-5.4.1.tgz $ tar xzvf apache-jmeter-5.4.1.tgz (出力略) $ cd apache-jmeter-5.4.1/bin/ $ sh jmeter.sh ================================================================================ 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 ================================================================================
お、Homebrew版で出ていたWARNINGが出てない!これは期待!
ということで、実際に立ち上がったGUIではFile -> Openも動きました。エラー出力もなし。めでたしめでたし。
Homebrew版のエラーを解消する方法は結局分からなかったけど、まあ動いたからよしとしよう。今日もyakをshavingしたので人生を生きているなあ。