アレックス・ロックウッドの答えはこう言っています:
推奨されるヒープ メモリ使用量と GC 時間の「最大レベル」は、可能な限り少なくします。
それは誤解を招くものです。私は実際には逆をお勧めします。アプリケーションが GC をより頻繁に実行し、有用な作業に費やす時間が (平均して) 少なくなるため、ヒープ サイズを圧縮しようとするのは悪い考えです。
問題は基本的にこれです。JVM がオブジェクトを割り当てるためのスペースを使い果たすと、従来の (非並行) GC が実行されます。次に、ガベージ以外のオブジェクトをトラバースし、それらを別の「スペース」にコピーします。GC サイクルを実行するためのプロセッサ時間は、非ガベージの量に最も強く依存します...しかし、それが達成する有用な作業 (解放するスペースの量) は に比例しheapsize - nongarbage
ます。したがって、ヒープサイズを絞ると、GC が実行する有用な作業の量が減少します...同じプロセッサ時間の消費に対して。
元の質問には次のように書かれています。
平均ヒープ使用率のアラームは約 85% で、100 ミリ秒の gc/5 分になると考えていました。
GC CPU 使用率の絶対レベルでモニター/アラームを設定することはおそらく役に立ちません。GC 時間は、サーバーのアクティビティと GC の効率によって異なります。サーバーがビジー状態になるたびに GC アラームが鳴るようにしたくありません。
85% の平均ヒープ使用率は警告を発する妥当なレベルですが、固定レベルでアラームを設定すると、あまりにも多くの誤報が発生する可能性があります。
これに代わる方法は、JVM オプションを使用して「GC で費やされた時間の割合」のしきい値を設定し、それを「OutOfMemoryException で JVM を強制終了する」オプションと組み合わせて、サーバーの起動スクリプトに自動再起動ループを配置することです。次に、再起動を監視します。