web-dev-qa-db-ja.com

Java 8のメタスペースの理想的なサイズを決定する方法

WebアプリケーションをJava 7からJava 8に移行します。PermSizejvmparam引数を定義しました。

Java 8はこのパラメータを無視するため、これは役に立ちません。メタスペースはJava 8で導入され、デフォルトのサイズは無制限です(物理メモリに制限されます)。 )動的な成長を伴います。

私の質問は、metaspace jvm paramsのWebアプリケーションに最適な値を見つける必要がありますか、それともデフォルトを使用することをお勧めしますか?

更新

私のWebアプリケーションの詳細:私のWebアプリケーションはstrutsおよびspringフレームワークに基づいています。通常、4kリクエスト/分かかります。このアプリケーションはTomcat8.5にデプロイされ、他のWebアプリケーションをホストしません。ただし、同じ仮想マシンで複数のTomcatインスタンスが実行されています。現在の-Xmsおよび-Xmxの値は1gに設定されています。

6

ここで考慮できることが複数あります。

  1. 初期メタスペースサイズ:JVMはメタスペースのサイズを変更する必要があるため、アプリケーションの起動時にマイナスの測定可能な影響が見られますか?次に、おそらく最小サイズを設定する必要があります。それでも、これはアプリケーションが大きくなると簡単に忘れられる設定になるため、これは避けようとします。 -XX:MetaspaceSize=<NNN>

  2. メタスペースの最大サイズ:メタスペースが特定のサイズに拡大したときにアプリケーションを失敗させますか?または、この点でサーバーが使用するリソースを制限しますか?次に、メタスペースの最大サイズを設定する必要があります-XX:MaxMetaspaceSize=<NNN>

  3. メタスペースフリーレシオ:多くの異なるクラスを動的にロードしますか?次に、メタスペースに空き比率を定義して、新しいクラスに常に十分なスペースを利用できるようにし、重大な状況でサイズ変更が不要になるようにすることができます。 -XX:MinMetaspaceFreeRatio=<NNN>および-XX:MaxMetaspaceFreeRatio=<NNN>

私の提案は、デフォルトに固執し、それをテストし、必要な場合にのみ反応することです。

7
Absurd-Mind

Metaspaceの導入は、前述の動的メモリの増加/割り当てによるガベージコレクションに関して、Javaのメモリ不足の問題(IIRC)を修正するための試みでした。

本番環境では、これから説明することは、実際にはそれほど実行可能ではありませんが、試してみてください。個人的には、デフォルトの動的設定で問題が発生したことはありませんが、アプリケーションのサイズとストレスに依存すると思います。今のところ、デフォルト設定が適切であると想定します。

2
Wep0n

ホルガーは正しい。それは明確に文書化されています ここ 、私はそれをここで引用するかもしれません。

-XX:MetaspaceSize = sizeガベージコレクションが最初に超過したときにトリガーされる割り当てられたクラスメタデータスペースのサイズを設定します。ガベージコレクションのこのしきい値は、使用されるメタデータの量に応じて増減します。デフォルトのサイズはプラットフォームによって異なります。

直接引用しますが、強調は私のものです;)

0
Hearen