ページ更新: 2009-05-19 (火) (4795日前)
(2003-12-14 新規作成) Linuxでメモリ確保したときのVSZ,RSSとfreeの値の変化。 RedHat 7.2 (kernel 2.4.7-10) + apt(freshmeat.net)使用。 目次 [編集]課題 #VSZとRSSの合計を表示すると、 $ ps -eo vsz,rss | awk '{v+=$1;r+=$2}END{print v,r}' 53212 25264 freeより少ないのだが、なにがメモリ(50MB以上)を使っているのか? プロセスがスワップされるとps uxのSTAT欄がSWになるはず。 このとき、VSZ,RSSの値は0になった‥‥と思うが、本当にそうか? (Linux-users-MLで話題になったと思う) LibraryとSystemCallの確認 (timestampつき) $ ltrace -r -o ltrace.log ./vsz $ ltrace -S -r -o ltrace.log ./vsz $ strace -r -o strace.log ./vsz
テストプログラム ##include <stdio.h> #include <stdlib.h> #include <string.h> /* (1) */ int main(int argc, char *argv[]) { const int size = 10*1024*1024; void *a; /* (2) */ puts("pause ... (next .. malloc)"); getchar(); a = (void*)malloc(size); /* ここでVSZが増加するはず */ if (!a) { puts("can't alloc"); return 1; } /* (3) */ puts("pause ... (next .. memset)"); getchar(); memset(a, 1, size); /* ここでRSSとusedが増加するはず */ /* (4) */ puts("pause ... (next .. free)"); getchar(); free(a); return 0; } /* (5) */[編集] テスト #[編集]1. プロセス起動前 #$ free total used free shared buffers cached Mem: 191084 174552 16532 0 60416 31948 -/+ buffers/cache: 82188 108896 Swap: 192772 0 192772[編集] 2. プロセス起動 #
$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND admin 10532 0.0 0.1 1384 308 pts/0 S 07:58 0:00 ./vsz $ free total used free shared buffers cached Mem: 191084 174560 16524 0 60440 31948 -/+ buffers/cache: 82172 108912 Swap: 192772 0 192772[編集] 3. プロセス起動、メモリ確保(10MB) #
$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND admin 10532 0.0 0.1 11628 340 pts/0 S 07:58 0:00 ./vsz $ free total used free shared buffers cached Mem: 191084 174560 16524 0 60444 31948 -/+ buffers/cache: 82168 108916 Swap: 192772 0 192772[編集] 4. memset(確保したメモリに1を書き込む) #
$ ps ux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND admin 10532 0.5 5.5 11628 10580 pts/0 S 07:58 0:00 ./vsz $ free total used free shared buffers cached Mem: 191084 184668 6416 0 60452 31948 -/+ buffers/cache: 92268 98816 Swap: 192772 0 192772[編集] 5. free, プロセス終了 #
$ free total used free shared buffers cached Mem: 191084 175448 15636 0 60460 31952 -/+ buffers/cache: 83036 108048 Swap: 192772 0 192772[編集] 補足: 参考文献 #注意: 後から書き足したものなので、本文には反映していない。
|