- ベストアンサー
topコマンドで表示されるVIRT、RESおよびSWAPの意味について
- topコマンドで表示されるVIRT、RES、SWAPの意味とは?
- CentOS5.4上で動作するアプリケーションの使用メモリについて調査中
- topコマンドの出力結果を見てもVIRTとRESの数値に差異があり、SWAPも大きな値が表示される
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
答えにたどり着く前に、若干長めの説明が必要です。 > topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。 RESは、ご認識の通り、そのプロセスの物理メモリ使用量です。 VIRTとして表示されている仮想メモリ総量とは、そのプロセスの 仮想アドレス空間の中で、有効となっているページの総量です。 これに計上されるのは、参考リンクの「仮想記憶の概念図」でカラフルに 描かれている「物理メモリ」や「スワップ」に対応するページのほか、 以下のようなものも含まれます。 ・プロセスが確保したメモリのうち、まだ一回もアクセスして いない部分。 ⇒アクセスしたときに初めて物理メモリが割り当てられ、 RESにも計上されていきます。 (javaのRESに比べてかなり大きいVIRTは、これによるものと 思われます。大きなヒープサイズを指定していませんか?) ・プロセスが ファイルを仮想メモリ空間にmmap(2) したが、 まだ一回もアクセスしていない部分。 ⇒Linux(UNIX) には、あたかもメモリをアクセスするかのように ファイルを読み書きできる mmap(2) という機能があり、 かなり多用されています。mmap直後のファイルは、 VIRTには計上されますが、物理メモリには読み込まれずRESには計上 されません。ファイルをmmapした仮想メモリ空間にアクセスした 部分が、物理メモリに読み込まれRESに計上されます。 > スワップ領域が無いのではtopコマンドはVIRTとRESが同じになり、 > SWAPはゼロとなると予想していたのですがどうしてならないのですか? 実は、SWAPとして表示される数値は、単に VIRT と RES の差です。 VERT(仮想メモリ総量)の中には、物理メモリ(RES)やスワップ領域の 使用量だけなく上記で挙げたような仮想空間の部分の合計が含まれ ますから、スワップ領域がゼロでも、上記で挙げたような空間が SWAP として表れているのです。 個人的にはこの数値をSWAPと呼ぶのは、かなり不適切だと思いますが、 多くのLinuxディストリビューションのtopコマンドで表示される SWAP欄は、そういう計算をしているということです。
お礼
とても具体的な説明でよく分かりました。 プログラム上でメモリ確保を行っても、その領域が使用されるまでは実際には確保されていないという最適化のようなもののためにVIRTとRESに差が出るようなことになっているんですね。 起動するアプリケーションの数は、アプリを起動していろいろと操作してみてからRESの値を参考に決めようと思います。 SWAP値は名前どおりのスワップアウトした値でないのは混乱させられますね、注意します。 ありがとうございました。