[ruby-trunk - Bug #5688][Open] Solaris10 で spawn を繰り返すとメモリリークする

Issue #5688 has been reported by okkez _.


Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

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 に変えても同様でした。

Issue #5688 has been updated by Nobuyoshi N…

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 を繰り返すとメモリリークする

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 に変えても同様でした。

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 を繰り返すとメモリリークする

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 に変えても同様でした。

Issue #5688 has been updated by okkez _.

Assignee deleted (okkez _)

いや、私はコミット権持ってないのでコミットできないです。


Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

Author: okkez _
Status: Assigned
Priority: Normal
Assignee:
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 に変えても同様でした。

Issue #5688 has been updated by okkez _.

Assignee set to okkez _

勧誘の手口に乗ります!

http://redmine.ruby-lang.org/projects/ruby/wiki/CommitterHowtoJa
によると、まつもとさんの承認が必要らしいので、承認お願いします。 > まつもとさん


Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

Author: okkez _
Status: Assigned
Priority: Normal
Assignee: okkez _
Category: core
Target version: 2.0.0
ruby -v: -

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 に変えても同様でした。

$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B

In message “[ruby-dev:44916] [ruby-trunk - Bug #5688] Solaris10 $B$G(B
spawn $B$r7+$jJV$9$H%a%b%j%j!<%/$9$k(B”
on Dec.01,2011 21:59:37, [email protected] wrote:

$B$$$d!";d$O%3%%C%H8";}$C$F$J$$$N$G%3%%C%H$G$-$J$$$G$9!#(B

$B$3$l$,4+M6$N<j8}$G$9!#(B

$B$=$l$G$O!#(B

On 12/2/11 1:40 PM, KOSAKI Motohiro wrote:

$B$“$”!"0-me$J(BRubyist$B$?$A$N<j8}$KA1NI$J%G%Y%m%C%Q$,$^$?$R$H$j!&!&!&!&(B

Ruby $B%3%_%C%?!<$3$o$$$o!<(B


Shota F. a.k.a. sora_h - http://sorah.jp/

Issue #5688 has been updated by okkez _.

Assignee changed from okkez _ to Yukihiro M.

見落されているようなので一旦まつもとさんに担当を振ってみます。


Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

Author: okkez _
Status: Assigned
Priority: Normal
Assignee: Yukihiro M.
Category: core
Target version: 2.0.0
ruby -v: -

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 に変えても同様でした。

$B4+M6$N<j8}$K>h$j$^$9!*(B

http://redmine.ruby-lang.org/projects/ruby/wiki/CommitterHowtoJa
$B$K$h$k$H!“$^$D$b$H$5$s$N>5G’$,I,MW$i$7$$$N$G!”>5G’$*4j$$$7$^$9!#(B >
$B$^$D$b$H$5$s(B

$B$“$”!"0-me$J(BRubyist$B$?$A$N<j8}$KA1NI$J%G%Y%m%C%Q$,$^$?$R$H$j!&!&!&!&(B

$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message “Re: [ruby-dev:44968] [ruby-trunk - Bug #5688] Solaris10
$B$G(B spawn $B$r7+$jJV$9$H%a%b%j%j!<%/$9$k(B”
on Mon, 12 Dec 2011 12:36:09 +0900, okkez _ [email protected]
writes:

|Assignee changed from okkez _ to Yukihiro M.
|$B8+Mn$5$l$F$$$k$h$&$J$N$G0lC6$^$D$b$H$5$s$KC4Ev$r?6$C$F$_$^$9!#(B

$B$$!“8+Mn$H$7$F$^$7$?!#Nc$N<j=g(B(see [ruby-dev:43227])$B$G?=@A(B
$B$7$F$/$@$5$$!#A0ED$/$s!”$h$m$7$/!#(B

$B$=$m$=$m(Bgithub$B2=$7$F(Bpull request$B$G=hM}$9$Y$-!)(B

$BA0ED$G$9!#(B

2011$BG/(B12$B7n(B12$BF|(B12:54 Yukihiro M. [email protected]:

|Assignee changed from okkez _ to Yukihiro M.
|$B8+Mn$5$l$F$$$k$h$&$J$N$G0lC6$^$D$b$H$5$s$KC4Ev$r?6$C$F$_$^$9!#(B

$B$$!“8+Mn$H$7$F$^$7$?!#Nc$N<j=g(B(see [ruby-dev:43227])$B$G?=@A(B
$B$7$F$/$@$5$$!#A0ED$/$s!”$h$m$7$/!#(B

$BN;2r$7$^$7$?!#(B

$B$=$m$=$m(Bgithub$B2=$7$F(Bpull request$B$G=hM}$9$Y$-!)(B

$B$3$l$O(BRuby$B$N%j%]%8%H%j<+BN$NOC$G$9(B?

$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message “Re: [ruby-dev:44971] Re: [ruby-trunk - Bug #5688] Solaris10
$B$G(B spawn $B$r7+$jJV$9$H%a%b%j%j!<%/$9$k(B”
on Mon, 12 Dec 2011 13:16:08 +0900, Shugo M.
[email protected] writes:

|> $B$=$m$=$m(Bgithub$B2=$7$F(Bpull request$B$G=hM}$9$Y$-!)(B
|
|$B$3$l$O(BRuby$B$N%j%]%8%H%j<+BN$NOC$G$9(B?

$B$($(!#Dj4|E*$K;X4x<T$N$40U8+$r;G$$$?$$$b$N$G$9!#$?$H$(:#2s$b(B
$B0\9T$G$-$J$$$K$7$F$b!#(B

Issue #5688 has been updated by Naohisa G…

後藤です。sparc上のSolaris担当ということになってますが、Intelチップ上のSolarisはよく知りません。

r34010 + trunk用のパッチが、sparc 上の Solaris10 にて、SunStudio 11, gcc 4.4.3, gcc
3.4.3, fcc 5.6 の32ビット、64ビット両方のコンパイルオプションにて、make
testが通り、Error/Failureが増えていないことを確認しました。

Oracle SolarisStudio 12.2 で 64ビットコンパイルすると make test-all が Segmentation
Fault になるのは別の問題だと思うので後で調べます。

Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

Author: okkez _
Status: Assigned
Priority: Normal
Assignee: Yukihiro M.
Category: core
Target version: 2.0.0
ruby -v: -

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 に変えても同様でした。

Issue #5688 has been updated by okkez _.

Assignee changed from Yukihiro M. to okkez _

コミット権を頂いたので担当を変更します。


Bug #5688: Solaris10 で spawn を繰り返すとメモリリークする

Author: okkez _
Status: Assigned
Priority: Normal
Assignee: okkez _
Category: core
Target version: 2.0.0
ruby -v: -

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 に変えても同様でした。