メモリ確保,使用
Linux は,メモリを確保したときでなく,実際にメモリにアクセスがあったときに物理メモリを割り当ててる,ってのは有名な話です.
確保しているメモリと実際に使用しているメモリをどのように調べられるかな,と言うのを調べてました.
簡単な c のプログラムを書いて,
- プログラム起動
- pause
- malloc (10MBほど)
- pause
- memset (確保した領域に一杯)
- pause
- 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
- malloc 直後
$ 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" で分かるみたいですね.