Linux,UNIXのメモリ管理

秀逸の説明あり。

http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html

URLをみるとページがいずれはなくなりそうなので、メモ。

メモリの状況を調べる

メモリの利用状況を調べる方法は, free, top, ps, vmstat, /proc/meminfo 等がある. xosview や ProcMeter を使うと X 上でグラフィカルに状況を見る事ができる. これらでメモリ−の利用状況を調べた場合, 慢性的なメモリ−不足のようにみえて, 戸惑うかも知れない. だが, メモリーが不足しているかどうか, 何が原因か, などの判断は単純にはゆかない.

メモリ−は十分なはずなのに 余裕が無い?

おや? 残りメモリ−が 1.6M(free が 1628) しかない? free の表示単位は 1k ブロックだから, 1.6M の余裕しかないように見える. ピンチなのか?

$ free
             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
....略

-/+ buffers/chche を見よう

Linux(っていうか UNIX かな?) では, 各プロセスにメモリを割り振った残りをバッファ(buffer)とキャッシュ(cache)に利用して, ディスク入出力の負荷を減らしている. そのため, free コマンド等で見える残りメモリ−(free)は 1M 程度の瞬間的な使いまわしに対処する程度しか残っていない事が多い.

$ free
             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
-/+ buffers/cache:      43984     148588  <----ここを見る
Swap:        96384          0      96384

この例では, 実質的な残りメモリ−は, バッファとキャッシュに転用された分も考慮すると free+buffers+cached で計算できる. 上の例で云うと free+buffers+cached = 1628+20112+126848 = 148588. まだまだ, メモリ−には余裕がある.

どのプロセスがメモリを消費しているのか?

個々のプログラムがメモリを浪費しているかどうか, 大雑把に観察する場合どうするか.

free コマンドでは全体のメモリーの使用状況しか分からない. 個々のプロセスのメモリーの使用状況を調べるには top や ps を用いる.

  • top コマンドを起動してから "M"(大文字) すると消費メモリの順に表示される.
  • ps コマンドで ps -xl --sort -vsize としても良い.