Oracle Application Container Cloud でJavaアプリを動かす際、Java Flight Recorder(JFR)が利用できます。何も指定しない場合defaultテンプレートが使われますが、より詳細な情報を得たい場合のやり方を書きます
その1. 組み込みの"profile"テンプレートを使う
Oracle Application Container Cloudでは、Javaアプリはzipで固めてdeployします。zipファイルの中にはmanifest.jsonというファイルを配置します。書式はこんな感じです
{ "runtime": { "majorVersion": "8" }, "command": "java -jar hoge.jar" }
※majorVersion=JDKのバージョン, command=アプリの起動コマンド、です
commnadの記述をこう変えると、より詳細な情報が取得できる"profile"テンプレートが適用されます
"command": "java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=settings=profile -jar hoge.jar"
その2. 自作テンプレートを使う
profileテンプレート、及びdefaultテンプレートは$JDK_HOME/jre/lib/jfr/に実体があります(default.jfc, profile.jfc)。これをカスタマイズして指定することも可能です
- JFRのテンプレートについてはこちら
- 例えばExceptionを全部記録したい場合、java/exception_throw句を以下のように変えます
<event path="java/exception_throw"> <setting name="enabled" control="http://www.oracle.com/hotspot/jvm/enable-exceptions">true</setting> <setting name="stackTrace">true</setting> </event>
manifest.json中のcommnad句は以下のようにします
"command": "java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=settings=$APP_HOME/hoge.jfc -jar hoge.jar"
カスタマイズしたhoge.jfcファイル、及び修正したmanifest.jsonを再度zipに詰めて、再デプロイすれば完成です(zip内の配置はこんな感じ)
hoge.zjp
|- hoge.jar
|- manifest.json
|- hoge.jfc