以下の GC メモリ パラメータを使用しています。
export MEM_OPTS="-Xmx2900m -Xms2900m -XX:NewSize=786m -XX:MaxNewSize=786m -XX:+UseTLAB -XX:MaxPermSize=128m"
32 ビット JVM を使用しています。サーバー RAM は 10 GB です。
オラクルのサイトから、
32 ビット JVM でより大きなヒープを取得できないのはなぜですか?
32 ビット JVM の理論上の最大ヒープ制限は 4G です。利用可能なスワップ、カーネル アドレス空間の使用、メモリの断片化、VM のオーバーヘッドなど、さまざまな追加の制約があるため、実際には、制限ははるかに低くなる可能性があります。最近のほとんどの 32 ビット Windows システムでは、最大ヒープ サイズは 1.4G から 1.6G の範囲です。32 ビットの Solaris カーネルでは、アドレス空間は 2G に制限されています。32 ビット VM を実行している 64 ビット オペレーティング システムでは、最大ヒープ サイズが大きくなる可能性があり、多くの Solaris システムでは 4G に近づきます。Java SE 6 以降、Windows の /3GB boot.ini 機能はサポートされていません。アプリケーションで非常に大きなヒープが必要な場合は、64 ビット アプリケーションをサポートするバージョンのオペレーティング システムで 64 ビット VM を使用する必要があります。詳細については、Java SE がサポートするシステム構成を参照してください。
わかりました。では、私の 32 ビット サーバーが 3.2 GB を使用できると仮定しましょう。
-Xmx is the total heap memory -XX:NewSize / -XX:MaxNewSize is the range of the size of the new generation inside that heap the difference is the range of the size of the old generation -XX:PermSize / -XX:MaxPermSize is the range of the size of the permanent generation, which is the non-heap memory
これによると、これはヒープ コンテンツではないため、3.2 GB には PermSize を含める必要はありません。
間違っている場合はお知らせください。
Xmx と NewSize で 3.2 GB を分割できます。右 ?