- PR -

LINUXのヒープ領域について

投稿者投稿内容
アントニオ
会議室デビュー日: 2006/01/10
投稿数: 18
投稿日時: 2006-02-07 23:40
LINUX(Fedore core3)で、ヒープ領域の使用量を表示できるコマンドがあれば、教えてください。(free、vmstatとかで確認できる?)
よろしくお願いします。

[ メッセージ編集済み 編集者: アントニオ 編集日時 2006-02-07 23:42 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-02-08 00:15
# どうしてヒープ領域だけを知りたいのかわかりませんが。
無さそうな気がします。
brk()だけを追っかければいいのならともかく、Linuxではmalloc()の
実装にmmap()を使ってるし、結構ややこしいことになりそうな...
アントニオ
会議室デビュー日: 2006/01/10
投稿数: 18
投稿日時: 2006-02-08 00:33
実は、この質問のしたのは、OS起動して特に何も起動していない状態(自分が作成したプログラム、リソースを使用しそうなP.P等を起動していない状態)3秒おきに実行すると、freeの値がすこしずつ減っていっているのです。
topとかでメモリを使用していそうなプロセスを調べたのですが、なぜfreeが減っているのか分からない状況です。

こういうときはどうしたらいいですか?何か調査する手段はありますか?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-02-08 00:50
LinuxがJavaのようなメモリ管理をしているように想像していませんか?
OSのメモリ管理手法はJava VMのGC等とはまるで異なる方式を使っています。

そもそもヒープやスタック、テキスト(コード)の領域の区別すらありません。
もちろん使い方的な区別はありますが、仮想メモリのページ属性の違い程度で、
実行可能であるかの設定や、アドレスの予約のみ行って初回アクセス時の
ページフォルトを利用して物理メモリを割り当てる設定、といった具合です。

#ローダー等では区別がありますが、それはちょっと別の話です。

Linuxでは大きく分けて、カーネル空間用、ユーザープロセス空間用、
バッファ/キャッシュの割り当てで区別されているくらいでしょうか?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-02-08 01:08
返信確認しないで送信しちゃいました。

free領域とは「全く利用されていない電気を食うだけ」なメモリです。
Linuxでは空き領域は積極的にバッファ/キャッシュに利用するので、
多くの場合はfreeが減ってbuffer/cacheが増えているはずです。

他にも、複数のプロセスから共有されていてどのプロセスのものと
考えてていいかわからないものもあります。psコマンドで表示される
httpdプロセスの合計が物理メモリ量を超えたりしますよね。

また、明示的に共有メモリを使わなくても、Copy on Writeにより、
fork(2)直後の物理メモリの割り当てを共有してたりもします。
アントニオ
会議室デビュー日: 2006/01/10
投稿数: 18
投稿日時: 2006-02-08 21:33
返信ありがとうございます。

ちなみに、free領域とは「全く利用されていない電気を食うだけ」なメモリとありますが、具体的な理由を教えてください。

よろしくお願いします。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-02-08 22:29
mm_struct の中にユーザモードスタックのサイズの情報を抱えてるので、
スタックの大きさは分からないでもないです。
ってか、そーゆーことができないと、ulimitとか使えないので。

同様に、brkの初期値と現在値も管理されているので、古典的な
ヒープなら分からんでもないですが、それを測る意義はかなり疑問。

> ちなみに、free領域とは「全く利用されていない電気を食うだけ」なメモリとありますが、具体的な理由を教えてください。

文字通り、freeだから使われてません。
OSが使っていようといまいと普通はハードウェアの知ったことでは
ないので、DRAMならリフレッシュされるから電気を食うですな。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-02-09 21:32
Linuxではfree領域、buffer/cache領域の合計を空きメモリと見ていいと思います。
swapもメモリ確保の状況によって多少(数MB程度)使われることもありますが、
居座るってことは使われていない領域なわけで、気にする必要はありません。

buffer/cache領域が確保できなければI/O性能が劣化するのでそれなりに
必要ではありますが、free/buffer/cacheの合計が十分あれば問題ないです。

スキルアップ/キャリアアップ(JOB@IT)