gc.c を改良する前に、何がどうなってプロセスサイズが 500MB にもなるかを測定できるようにした方がよいのでは。ということで、gc.c に手を加えて
$ ./ruby-1.9 -e '$a = " "*1024*1024; b = " "*1024*1024; GC.stats'
vm: 1157 kb
machine_context: 1 kb
symbols: 63 kb
protected global variables: 0 kb
end_proc: 0 kb
global variables: 1025 kb
classes: 1 kb
trap: 0 kb
generic instance variables: 0 kb
parser: 0 kb
などという機能をつくってみた。これだとあんまり役に立たないな。やりなおし。
こういう方がわかりやすいか。
./ruby-1.9 -e '
th = Thread.new{ a = " "*1024*1024; sleep 1}
sleep 0.1
p GC.memsize(th)/1024'
1157
スレッドのスタックを走査するメソッドも作ってみた。
$ ./ruby-1.9 -e '
th = Thread.new{ a = "hoge" }
sleep 0.1
p GC.traverse(th)'
[Thread, #<Proc:0xb7a55714@-e:1>, [], #<ThreadGroup:0xb7a5f548>, "hoge", main]
最近のコメント