1. ホーム
  2. tomcat

[解決済み] MaxMetaspaceSizeを設定した方が良いですか?

2022-03-10 10:41:35

質問

という質問をした後 これ という問いかけをしたところ、重要なのは「どうしたらいいか」ではなく「どうすべきか」であることがすぐにわかりました。

Java7からJava8へ移行するお客様がいます(Tomcat7を使用)。Java7では -XX:MaxPermSize , で、一部の顧客はインストーラが設定するデフォルトよりも最大値を増やしています。 個々のニーズや用途に応じて

必要なもの を設定します。 -XX:MaxMetaspaceSize (以前の -XX:MaxPermSize の設定)を定義している顧客に対して、カスタム最大値を設定することができますか?新規にインストールする場合はどうでしょうか?その場合 -XX:MaxMetaspaceSize をすべて削除してください。

その場合のメリットとデメリットを教えてください。

どのように解決するのか?

前回の回答でコメントしたように 理由 これらのメモリプールに制限を設けることは、異なるものです。

もし、あなたのユーザーが以前 増加 MaxPermSize がデフォルトより大きいのは、おそらく CMS でのフル GC や並行モードの失敗を避けるためか、アプリケーションが本当に多くのパーマ gen スペースを必要としていたためでしょう。

メタスペースの制限を事実上無限のデフォルトから減らすことは、全く別の目的を果たすことになります:無制限のメタスペースの増加を避けることです。

ただ、それはあくまで上限値であるということです。実際にコミットされた、つまり 現在 メタスペースのサイズは小さくなります。実際 MaxMetaspaceFreeRatio (デフォルト70%) これは、実際のメタスペース・サイズが占有率の230%を超えることがないことを意味します。

そして、それが成長するためには、まず、オブジェクトを解放しようとするガベージコレクション(メタスペースフル)を強制的に満杯にする必要があります。 MinMetaspaceFreeRatio (デフォルト 40%) の目標を達成するために 現在の GCサイクルの後、メタスペースは占有率230%以下になる。

したがって、アプリケーションがクラスローダーやクラスを継続的にリークしたり、膨大な量の動的コードを生成したりしない限り、実際のメタスペース・サイズは実際の必要性に近い範囲内で安定するはずです。

TL;DR: メタスペース・サイズを制限する理由があるかもしれませんが、それはパーマ・ジェン・サイズを設定した本来の理由とは異なる可能性が高いです。したがって、その必要性を再評価する必要があります。