OpenAM起動時のJVMオプションについて

OpenAMを稼働するJavaコンテナ(Tomcatなど)にJVMオプションを指定して起動していると、トラブルがあった場合でも解析ができ、原因を突き止められる可能性が高くなります。ということで、参考までにGitHubにOpenAM用のTomcat環境変数設定ファイルを公開しておきました。

k-tamura/setenv-for-openam

  • setenv.sh (Linux用)
  • setenv.bat (Windows用)

$CATALINA_HOME/bin/にコピーして、実行権限を付与しておけば、自動的に読み込まれます。

各オプションについて、簡単に説明しておきます。

JITコンパイラのタイプ

JITコンパイラはサーバーコンパイラを選択します。通常、長時間起動するアプリケーションにおいて、-clientよりも性能が高くなります。

-server

Javaヒープサイズ

OpenAM管理ガイドのチューニングのセクションに書いてある通り、組み込みOpenDJを使用する場合(デフォルト)は最低でも2GBに設定します。また、Tomcat Expertによると、この2つの値は同じにした方がいいようです。

-Xms2048m
-Xmx2048m

Permanent領域/Metaspaceのサイズ

JDK 7以前の場合はPermanent領域のサイズを、

-XX:PermSize=256m
-XX:MaxPermSize=256m

JDK 8以降の場合はMetaspaceのサイズを設定します。

-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=256m

ForgeRock社の推奨値は、両方とも256MBです。

その他、OpenAM固有の推奨値

OpenAM管理ガイドのチューニングのセクションに書いてあったその他の推奨値を必要に応じて設定します。

-Dsun.net.client.defaultReadTimeout=60000
-Dsun.net.client.defaultConnectTimeout=30000
-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

GC(ガベージコレクション)

GCのアルゴリズムやログ出力について設定します。GCのアルゴリズムはいくつかありますが、OpenAM管理ガイドのチューニングのセクションに書いてある通り、CMS(Concurrent Mark Sweep)を指定します。性能面の影響は小さいので、GCログの詳細も出力するようにします。

-Xloggc:$CATALINA_HOME/logs/gc.log
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:+PrintHeapAtGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=10M

-XX:+PrintGCTimeStamps」を付加すると、JVMを起動してからの時間が「17.890」のようにGCログに出力されますが、見づらいので「-XX:+PrintGCDateStamps」を付加して「2017-01-13T18:34:16.743」のような日時が出力されるようにしています(後者の方がごくわずかなオーバーヘッドが発生します)。

ヒープダンプの出力

OutOfMemoryErrorが発生したときにヒープダンプを出力するようにします。

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$CATALINA_HOME/logs/

致命的なエラーの出力

JavaVMのクラッシュやJNIで呼び出したライブラリでのエラーなど、致命的なエラーがあった場合に、エラーファイルを出力します。この機能自体はデフォルトで有効ですが、出力先を変更したい場合は明示的に設定します。

-XX:ErrorFile=$CATALINA_HOME/logs/hs_err_pid%p.log

JFR(Java Flight Recorder)の有効化

商用利用のためにOracleのJava上でTomcatを動作させる場合は、Java Flight Recorder(JFR)も有効にします。JFRは、実行中のJavaアプリケーションに関する診断およびプロファイリングのためのデータを収集するツールです。記録中のオーバーヘッドはほとんどなく、性能面の影響は小さいので、常に有効化しておいていいと思います。

-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder

JFRを有効にするには、-XX:+UnlockCommercialFeaturesオプションの追加も必要です。

 


参考

http://www.tomcatexpert.com/blog/2011/11/16/setting-measurement-garbage-collection-apache-tomcat

http://www.tomcatexpert.com/blog/2011/11/22/performance-tuning-jvm-running-tomcat

https://backstage.forgerock.com/#!/docs/openam/13/admin-guide/chap-tuning

Javaパフォーマンス Scott Oaks 著、Acroquest Technology株式会社 監訳、寺田 佳央 監訳、牧野 聡 訳


 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中