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]
最近のコメント