Interstage Application Serverにおいて、複数のJavaアプリケーション実行で、指定ヒープサイズの総和が物理メモリを大きく上回りますが問題ないですか?
Interstage Application Serverのよくあるご質問を検索できます。
Interstage Application Serverの技術情報はこちら
- 複数のJavaアプリケーションを実行しており、指定ヒープサイズ(-Xmx)の総和が物理メモリを大きく上回っていますが、問題なく動作している理由を教えてください。
- OSは、物理メモリだけでなくハードディスク上のスワップファイルも活用しているため、物理メモリの大きさ以上のメモリ領域を使用することができます。
このテクノロジーを仮想メモリといいます。仮想メモリの大きさは、物理メモリとスワップファイルの各サイズの合計になります。そのため、実行するアプリケーション群のメモリ使用量の総和が物理メモリの大きさを超えていても、仮想メモリの大きさの範囲内であれば動作できます。
しかし、ハードディスクへのアクセスは物理メモリより低速なので、メモリのスワッピングは性能に大きく影響を与えます。そのため、性能を意識し、アプリケーションのメモリ使用量は物理メモリの範囲とすることを推奨します。
なおアプリケーションは、OSが生成するプロセス上で実行されます。
プロセスには、OSから仮想アドレス空間が割り当てられ、搭載されている物理メモリのサイズとは関係なく、仮想アドレス空間としての大きさは常に一定です。
例えば、32ビットアーキテクチャのOSの場合、物理メモリのサイズに依存せず、仮想アドレス空間のサイズは常に4GB(2の32乗バイト)です。そしてプロセスが持つ仮想アドレス空間のうち、実際にプロセスが使用できる空間を、ユーザー空間といいます。ユーザー空間には、プログラムの実体(Windows®でJavaアプリケーションを実行する場合は、java.exeなど)がコピーされるだけでなく、スタックやヒープなどのさまざまなセグメントがあります。
さらにユーザー空間は、実行するプログラムだけでなく、そのプログラムを実行させるためのOS側のプログラムなどでも使用します。
Javaアプリケーションを実行するプロセスのユーザー空間の場合には、前述の各セグメントの他に、Javaオブジェクトを格納するセグメント(=Javaヒープ)があります。このため、Javaアプリケーションをチューニングする際の対象となるJavaヒープのサイズの上限値は、ユーザー空間のサイズよりも少なくなります。
Javaアプリケーションのチューニングを実施する際は、仮想メモリの大きさやプロセスの使用状況など、システムの状態を考慮する必要があります。なおOSの種類などによって、ユーザー空間として使用できる上限値が異なるため、注意が必要です。
詳細は、以下のマニュアルを参照してください。
-
V9
Interstage Application Server/Interstage Web Server チューニングガイド
第7章 JDK/JREのチューニング
7.1 基礎知識
7.1.3 仮想メモリと仮想アドレス空間
7.1.4 スタック
7.1.5 Javaヒープとガーベジコレクション
なお、上記以外の製品バージョン/レベルにつきましては、該当するマニュアル箇所を参照してください。
関連FAQ:
「Interstage Application Serverの情報を確認したいのですが、マニュアルはどこにありますか?」 -
製品・サービス区分 | Interstage | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 運用/保守 |