jmxremote
java の引数に指定する、いわゆるこういうやつ。
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.registry.ssl=false
これが掲題の通り、 macOS 環境の ColdFusion 2023 (JRE17) で動作しなかった。
今ってデフォルトで有効化されてんじゃないの?
確認する限りだと Java 8 あたりでデフォルト有効化されているっぽかった。
とはいえ以下のような記事もあり、過去には ColdFusion 付属の JRE 環境でも jmxremote が動いている模様は観測されていた。
動かなかった理由
わからん。
jvm.config
ファイルを直接編集したり、 ColdFusion Administrator の Java と JVM 項目から変更してみたりしたけど、結局バンドルされている JRE では動作させることができなかった。
結局どうした
掲題の通り macOS 環境で、なおかつ anyenv を利用していたので、 jenv をインストールしてから brew で openjdk@17
パッケージをインストールして、 ColdFusion を配置したディレクトリ以下で jenv local openjdk64-17.0.8.1
などしたあと、 ColdFusion が利用する Java を入れ替えた。
手順
備忘録として雑に記載しておく。
❯ anyenv install jenv ❯ exec $SHELL -l ❯ brew install openjdk@17 ❯ jenv enable-plugin export ❯ exec $SHELL -l ❯ sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk ❯ echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc ❯ jenv add `/usr/libexec/java_home -v "17"` ❯ cd ~/Workspace/ColdFusion_2023_WWEJ_macos ❯ jenv local openjdk64-17.0.8.1
この後 ColdFusion Administrator なり jvm.config ファイルなりから Java へのパスを書き換えて ColdFusion プロセスを再起動すれば設定される。
ちなみにシンボリックリンクを貼るトコは brew でインストール時に表示されるが、忘れた場合は brew info
すると教えてくれるので活用しよう。
❯ brew info openjdk@17 ==> openjdk@17: stable 17.0.8.1 (bottled) [keg-only] Development kit for the Java programming language https://openjdk.java.net/ /opt/homebrew/Cellar/openjdk@17/17.0.8.1 (635 files, 305MB) Poured from bottle using the formulae.brew.sh API on 2023-10-16 at 18:25:37 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/o/openjdk@17.rb License: GPL-2.0-only with Classpath-exception-2.0 ==> Dependencies Build: autoconf ✘, pkg-config ✔ Required: giflib ✔, harfbuzz ✘, jpeg-turbo ✔, libpng ✔, little-cms2 ✔ ==> Requirements Build: Xcode (on macOS) ✔ ==> Caveats For the system Java wrappers to find this JDK, symlink it with sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk openjdk@17 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. If you need to have openjdk@17 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc For compilers to find openjdk@17 you may need to set: export CPPFLAGS="-I/opt/homebrew/opt/openjdk@17/include" ==> Analytics install: 30,027 (30 days), 91,023 (90 days), 185,024 (365 days) install-on-request: 20,494 (30 days), 61,393 (90 days), 109,428 (365 days) build-error: 106 (30 days)
openjdk への切替後
改めて jmxremote 周りの記述を jvm 設定として投入する。
結局これを設定して何がしたかったか、というと、VisualVM などで JVM メトリクスをウォッチしたかった。
ある処理がデータ取得・整形など走ったりしていてめちゃくちゃ重く、なおかつ集計対象として時間軸に比例して増えるテーブルをフルスキャンする仕様で、直接 JVM 側にアタッチしたかったという所から始まったのだけど、めちゃくちゃ時間がかかってしまった。 次はリファクタリングだ……。
というわけで jmxremote
がなんか動かねえんだけど! という人はバンドルされている Oracle JRE から OpenJDK などに変更してみてください。 ちなみにこれ本番系では推奨されない (動作保証環境から逸脱する) のは当然なので、開発や検証などの環境にとどめておきましょう。