WebアプリケーションをJava 7からJava 8に移行します。PermSize
jvmparam引数を定義しました。
Java 8はこのパラメータを無視するため、これは役に立ちません。メタスペースはJava 8で導入され、デフォルトのサイズは無制限です(物理メモリに制限されます)。 )動的な成長を伴います。
私の質問は、metaspace
jvm paramsのWebアプリケーションに最適な値を見つける必要がありますか、それともデフォルトを使用することをお勧めしますか?
更新:
私のWebアプリケーションの詳細:私のWebアプリケーションはstruts
およびspring
フレームワークに基づいています。通常、4k
リクエスト/分かかります。このアプリケーションはTomcat8.5にデプロイされ、他のWebアプリケーションをホストしません。ただし、同じ仮想マシンで複数のTomcatインスタンスが実行されています。現在の-Xms
および-Xmx
の値は1g
に設定されています。
ここで考慮できることが複数あります。
初期メタスペースサイズ:JVMはメタスペースのサイズを変更する必要があるため、アプリケーションの起動時にマイナスの測定可能な影響が見られますか?次に、おそらく最小サイズを設定する必要があります。それでも、これはアプリケーションが大きくなると簡単に忘れられる設定になるため、これは避けようとします。 -XX:MetaspaceSize=<NNN>
メタスペースの最大サイズ:メタスペースが特定のサイズに拡大したときにアプリケーションを失敗させますか?または、この点でサーバーが使用するリソースを制限しますか?次に、メタスペースの最大サイズを設定する必要があります-XX:MaxMetaspaceSize=<NNN>
メタスペースフリーレシオ:多くの異なるクラスを動的にロードしますか?次に、メタスペースに空き比率を定義して、新しいクラスに常に十分なスペースを利用できるようにし、重大な状況でサイズ変更が不要になるようにすることができます。 -XX:MinMetaspaceFreeRatio=<NNN>
および-XX:MaxMetaspaceFreeRatio=<NNN>
私の提案は、デフォルトに固執し、それをテストし、必要な場合にのみ反応することです。
Metaspaceの導入は、前述の動的メモリの増加/割り当てによるガベージコレクションに関して、Javaのメモリ不足の問題(IIRC)を修正するための試みでした。
本番環境では、これから説明することは、実際にはそれほど実行可能ではありませんが、試してみてください。個人的には、デフォルトの動的設定で問題が発生したことはありませんが、アプリケーションのサイズとストレスに依存すると思います。今のところ、デフォルト設定が適切であると想定します。
ホルガーは正しい。それは明確に文書化されています ここ 、私はそれをここで引用するかもしれません。
-XX:MetaspaceSize = sizeガベージコレクションが最初に超過したときにトリガーされる割り当てられたクラスメタデータスペースのサイズを設定します。ガベージコレクションのこのしきい値は、使用されるメタデータの量に応じて増減します。デフォルトのサイズはプラットフォームによって異なります。
直接引用しますが、強調は私のものです;)