From: okkez _ Date: 2011-12-01T19:11:21+09:00 Subject: [ruby-dev:44914] [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする Issue #5688 has been updated by okkez _. =begin r33784 向けのパッチです。 Debian 上で test-all が全て通ることを確認しています。 Solaris 上では確認できていませんので、どなたか追試していただけると助かります。 diff --git a/thread_pthread.c b/thread_pthread.c index 7fa8e95..b5c97bd 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -1236,6 +1236,7 @@ rb_thread_create_timer_thread(void) fprintf(stderr, "[FATAL] Failed to create timer thread (errno: %d)\n", err); exit(EXIT_FAILURE); } + pthread_attr_destroy(&attr); } } 以下のパッチで Solaris 上の 1.9.2-p180 でメモリリークが解消できました。 Solaris 上で test-all の E,F が増えていないことを確認しました。 diff --git a/thread_pthread.c b/thread_pthread.c index 4746aaa..ab7bdf9 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -835,6 +835,7 @@ rb_thread_create_timer_thread(void) } native_cond_wait(&timer_thread_cond, &timer_thread_lock); native_mutex_unlock(&timer_thread_lock); + pthread_attr_destroy(&attr); } rb_disable_interrupt(); /* only timer thread recieve signal */ } できれば、1.9.2, 1.9.3 にもバックポートして欲しいです。 よろしくお願いします。 =end ---------------------------------------- Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする http://redmine.ruby-lang.org/issues/5688 Author: okkez _ Status: Open Priority: Normal Assignee: Category: Target version: 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