TenForward

技術ブログ。はてなダイアリーから移転しました

メモリ確保,使用

Linux は,メモリを確保したときでなく,実際にメモリにアクセスがあったときに物理メモリを割り当ててる,ってのは有名な話です.

確保しているメモリと実際に使用しているメモリをどのように調べられるかな,と言うのを調べてました.

簡単な c のプログラムを書いて,

  1. プログラム起動
  2. pause
  3. malloc (10MBほど)
  4. pause
  5. memset (確保した領域に一杯)
  6. pause
  7. free

という順で,各ポイントでプログラムの実行を停止するようにしておいて (単にgetchar()),停止した時点で各種コマンドでメモリの使用状況を調べてみる,ってのをやってみました.

  • プログラム起動直後
$ free
             total       used       free     shared    buffers     cached
Mem:       2074776    1980548      94228          0     359828     934664
-/+ buffers/cache:     686056    1388720
Swap:      2097136         64    2097072
$ ps aux | grep alloctest
karma    25742  0.0  0.0   1308   280 pts/2    S+   15:39   0:00 ./alloctest
$ grep "Committed_AS" /proc/meminfo
Committed_AS:   686168 kB
$ free
             total       used       free     shared    buffers     cached
Mem:       2074776    1980392      94384          0     359948     934668
-/+ buffers/cache:     685776    1389000
Swap:      2097136         64    2097072
$ ps aux | grep alloctest
karma    25742  0.0  0.0  11552   320 pts/2    S+   15:39   0:00 ./alloctest
$ grep "Committed_AS" /proc/meminfo
Committed_AS:   697208 kB
  • memset 直後
$ free
             total       used       free     shared    buffers     cached
Mem:       2074776    1990724      84052          0     359984     934668
-/+ buffers/cache:     696072    1378704
Swap:      2097136         64    2097072
$ ps aux | grep alloctest
karma    25742  0.0  0.5  11552 10560 pts/2    S+   15:39   0:00 ./alloctest
$ grep "Committed_AS" /proc/meminfo
Committed_AS:   697208 kB
  • free 後
$ free
             total       used       free     shared    buffers     cached
Mem:       2074776    1980912      93864          0     360084     934672
-/+ buffers/cache:     686156    1388620
Swap:      2097136         64    2097072
$ ps aux | grep alloctest
karma    25787  0.0  0.0   1308   320 pts/2    S+   15:44   0:00 ./alloctest
$ grep "Committed_AS" /proc/meminfo
Committed_AS:   687760 kB
  • プロセス単独であれば ps -aux コマンドで見た VSZ と RSS で分かるみたいですね.
  • free コマンドでは,確保している量は分からないっぽい... 実際に使われた段階で出力が変化します.
  • ホスト全体で確保している (使っている/使ってない両方を含む) 量は /proc/meminfo の "Committed_AS" で分かるみたいですね.