From: Nobuyoshi Nakada Date: 2011-12-01T19:35:49+09:00 Subject: [ruby-dev:44915] [ruby-trunk - Bug #5688][Assigned] Solaris10 で spawn を繰り返すとメモリリークする Issue #5688 has been updated by Nobuyoshi Nakada. Category set to core Status changed from Open to Assigned Assignee set to okkez _ Target version set to 2.0.0 たしかにpthread_attr_destroy()が抜けているように見えます。 コミットよろしく。 ---------------------------------------- Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする http://redmine.ruby-lang.org/issues/5688 Author: okkez _ Status: Assigned Priority: Normal Assignee: okkez _ Category: core Target version: 2.0.0 ruby -v: ruby 1.9.3p0 (2011-10-30 revision 33570) [i386-solaris2.10] Solaris10 で spawn を繰り返すとメモリリークします。 Ruby は Solaris の gcc でビルドしています。32bit でも 64bit でも結果は同じでした。 1.9.2-p180(64bit), 1.9.2-p290(32bit), 1.9.3-p0(64bit) で確認しました。 再現手順は以下の通りです。 spawn-sleep.rb を以下の内容で作ります。 #!/usr/bin/env ruby ARGV[0].to_i.times do |n| spawn("sleep", "5") sleep 0.2 GC.start if n % 100 == 0 end spawn-sleep.sh を以下の内容で作ります。 #!/bin/bash ./spawn-sleep.rb 3000 & pid=$! echo spawn-sleep:$pid trap "kill $pid; exit" INT TERM count=0 while true; do date "+%Y-%m-%d %H:%M:%S" ps -o pid,ppid,vsz,rss,args | head -1 ps -o pid,ppid,vsz,rss,args | grep spawn-sleep.rb | grep -v grep echo "==========" sleep 1 done これで spawn-sleep.sh を実行すると spawn-sleep.rb の VSZ と RSS が徐々に増えていきます。 これはメモリリークだと思うのですが、Debian(sid) では再現しませんでした。 ちなみに、spawn の部分を system に変えても同様でした。 -- http://redmine.ruby-lang.org