Interstage Application Serverにおいて、javaコマンドの起動オプションに-Xmx512mを指定しましたが、psコマンドでVSZフィールドを見ると、512MBではなく2GBになっています。
- javaコマンドの起動オプションに-Xmx512mを指定しましたが、psコマンドでVSZフィールドを見ると、512MBではなく2GBになっているのは、なぜですか?
- psコマンドのVSZフィールドの値は、プロセス全体としての仮想メモリの使用状況を表示しています。プロセスが使用する仮想メモリは、Javaヒープなど、プログラムが個々の目的で使用するメモリ領域だけでなく、プログラムの実体がコピーされた領域やスタックなど、別の様々な目的でも使用されています。さらに、実行するプログラムだけでなく、そのプログラムを実行させるためのOS側のプログラムでも、プロセスの仮想メモリは使用されます。Javaのヒープは、Java VMがJavaオブジェクトを格納/管理する目的で使用するメモリ領域であり、プロセスが使用する仮想メモリの一部にすぎません。そのため、Javaのヒープサイズと、psコマンドのVSZフィールドの値が一致することはなく、必ず「VSZの値>Javaのヒープサイズ(注)」の関係になります。また、Javaのヒープサイズとプロセスが使用する仮想メモリの大きさに直接的な制御関係はありませんので、JavaのヒープサイズからVSZフィールドの値を求める方法もありません。
なお、psコマンドのRSSフィールドの値は、VSZフィールドの値=プロセスが使用する仮想メモリ量のうち、OS制御によりスワップされていない大きさを示しています。プロセスが使用する仮想メモリ量を把握する場合は、RSSフィールドの値ではなく、VSZフィールドの値を使用してください。(スワップ制御はOS制御であるため、RSSフィールドの値とJavaのヒープサイズとの間には、何らの関係もありません。) psコマンドが出力する各フィールドの詳細については、psに対するmanページを参照してください。
注:Javaヒープは、Javaプロセス起動時に各領域(メモリ割り当てプールおよびPermanent世代領域)の初期値を割り当て、各領域の最大値まで段階的に拡大する制御方法を用いて管理されています。そのため、値を参照した時点で各領域の最大値まで使用していなかった場合は、この関係が成り立たない場合もあります。ただし、Linuxの場合は、VSZフィールドの値に上記制御の結果が反映されない(常に最大値でVSZフィールドの値が反映されます)ため、この関係は常に成り立ちます。
製品・サービス区分 | Interstage | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 構築(導入/移行) |