Hitachi

uCosminexus Application Runtime - Cosminexus Developer's Kit for Java 機能解説・リファレンス


2.2.7 Javaヒープ内のMetaspace領域のメモリサイズの見積もり

SerialGC使用時のMetaspace領域のメモリサイズの見積もりについて説明します。Metaspace領域は,ロードされたclassなどが格納される領域です。

Metaspace領域のメモリサイズは,「2.2.1(5) SerialGC使用時のJavaVMで使用するメモリ空間の構成とJavaVMオプション」で示したとおり,-Xmxオプションで指定したメモリサイズ(Javaヒープ)とは別に確保されます。

Java HotSpot VMのオプションのデフォルト値については,マニュアル「uCosminexus Application Runtime ユーザーズガイド」を参照してください。

次に,アプリケーションサーバを例にMetaspace領域の使用量の見積もり方法を示します。

Metaspace領域の使用量の見積もり方法

Metaspace領域でのメモリ使用量は,大体,ロードされるクラスファイルの合計サイズになります。

Metaspace領域のメモリサイズは,-XX:MaxMetaspaceSize=<size>オプション,および-XX:MetaspaceSize=<size>オプションで指定します。これらのオプションのデフォルト値については,マニュアル「uCosminexus Application Runtime ユーザーズガイド」を参照してください。なお,アプリケーションのインポート時に一時的にMetaspace領域の使用量が増加する場合があります。

Metaspace領域は,JavaVM上で動作するプログラムのすべてのクラスファイルのサイズの総和から見積もることができます。例えば,Tomcatの場合,アプリケーションのクラスファイル,Tomcatが提供するクラスファイル,JDKが提供するクラスファイルのサイズの総和です。なお,JDKが提供するクラスファイルのサイズは約130メガバイトです。

メモ

開発環境でのソフト参照によるMetaspace領域の圧迫の解消方法

アプリケーションサーバでは,ソフト参照の影響によって,アプリケーションをアンデプロイしたときにMetaspace領域の解放が遅延することがあります。このため,開発環境などでアプリケーションのデプロイおよびアンデプロイを繰り返した場合,Metaspace領域の解放遅延が原因で,Metaspace領域が圧迫されることがあります。ソフト参照によるMetaspace領域の圧迫は,次のオプションを指定すると解消できます。

  • -XX:SoftRefLRUPolicyMSPerMB=0

-XX:SoftRefLRUPolicyMSPerMBオプションに0を指定すると,すべてのソフト参照が無効になります。ソフト参照は,性能向上のためのキャッシュとして使用されることが多いため,このオプションの指定によってアプリケーションの性能が劣化するおそれがあります。このため,このオプションは,開発環境でMetaspace領域が圧迫された場合にだけ指定してください。

メモ

Metaspace領域の特殊なチューニングの考え方

Metaspace領域はオプションに設定された値のメモリを必ず使用するわけではありません。実際には,実行に必要なサイズのメモリだけ使用します。

  • Metaspace領域のOutOfMemoryErrorの発生リスクを下げる

    見積もり時に想定していなかったMetaspace領域の使用量の増加によって,OutOfMemoryErrorが発生するリスクを下げるためには,見積もり値にバッファを持たせた値を-XX:MaxMetaspaceSizeと-XX:CompressedClassSpaceSizeに設定してください。Metaspace領域の使用量がこの値を超えるまではMetaspace領域のOutOfMemoryErrorは発生しません。

  • Metaspace領域に起因するFullGCの発生リスクを下げる

    見積もり時に想定していなかったMetaspace領域の使用量の増加によって,Metaspace領域に起因するFullGCが発生するリスクを下げるためには,見積もり値にバッファを持たせた値を-XX:MetaspaceSize,-XX:MaxMetaspaceSize,-XX:CompressedClassSpaceSizeに設定してください。Metaspace領域の使用量がこの値を超えるまではMetaspace領域に起因するFullGCは発生しません。