Project

General

Profile

Actions

Bug #5688

closed

Solaris10 で spawn を繰り返すとメモリリークする

Added by okkez (okkez _) over 12 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-dev:44904]

Description

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


Related issues 2 (0 open2 closed)

Related to Backport193 - Backport #5996: please backport r34033.(fix memory leak)Closedokkez (okkez _)02/10/2012Actions
Related to Backport192 - Backport #5997: please backport r34033.(fix memory leak)Closedokkez (okkez _)02/10/2012Actions

Updated by okkez (okkez _) over 12 years ago

=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

Updated by nobu (Nobuyoshi Nakada) over 12 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to okkez (okkez _)
  • Target version set to 2.0.0

たしかにpthread_attr_destroy()が抜けているように見えます。
コミットよろしく。

Updated by okkez (okkez _) over 12 years ago

  • Assignee deleted (okkez (okkez _))

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

Updated by usa (Usaku NAKAMURA) over 12 years ago

  • ruby -v changed from ruby 1.9.3p0 (2011-10-30 revision 33570) [i386-solaris2.10] to -

こんにちは、なかむら(う)です。

In message "[ruby-dev:44916] [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする"
on Dec.01,2011 21:59:37, wrote:

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

これが勧誘の手口です。

それでは。

U.Nakamura

Updated by okkez (okkez _) over 12 years ago

  • Assignee set to okkez (okkez _)

勧誘の手口に乗ります!

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

Updated by kosaki (Motohiro KOSAKI) over 12 years ago

勧誘の手口に乗ります!

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

ああ、悪辣なRubyistたちの手口に善良なデベロッパがまたひとり・・・・

Updated by sorah (Sorah Fukumori) over 12 years ago

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

ああ、悪辣なRubyistたちの手口に善良なデベロッパがまたひとり・・・・

Ruby コミッターこわいわー

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

僕と契約して Ruby コミッターになってよ!

Updated by okkez (okkez _) over 12 years ago

  • Assignee changed from okkez (okkez _) to matz (Yukihiro Matsumoto)

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

Updated by matz (Yukihiro Matsumoto) over 12 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:44968] [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする"
on Mon, 12 Dec 2011 12:36:09 +0900, okkez _ writes:

|Assignee changed from okkez _ to Yukihiro Matsumoto
|見落されているようなので一旦まつもとさんに担当を振ってみます。

おお、見落としてました。例の手順(see [ruby-dev:43227])で申請
してください。前田くん、よろしく。

そろそろgithub化してpull requestで処理すべき?

Updated by shugo (Shugo Maeda) over 12 years ago

前田です。

2011年12月12日12:54 Yukihiro Matsumoto :

|Assignee changed from okkez _ to Yukihiro Matsumoto
|見落されているようなので一旦まつもとさんに担当を振ってみます。

おお、見落としてました。例の手順(see [ruby-dev:43227])で申請
してください。前田くん、よろしく。

了解しました。

そろそろgithub化してpull requestで処理すべき?

これはRubyのリポジトリ自体の話です?

--
Shugo Maeda

Updated by matz (Yukihiro Matsumoto) over 12 years ago

まつもと ゆきひろです

In message "Re: [ruby-dev:44971] Re: [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする"
on Mon, 12 Dec 2011 13:16:08 +0900, Shugo Maeda writes:

|> そろそろgithub化してpull requestで処理すべき?
|
|これはRubyのリポジトリ自体の話です?

ええ。定期的に指揮者のご意見を伺いたいものです。たとえ今回も
移行できないにしても。

Updated by ngoto (Naohisa Goto) over 12 years ago

後藤です。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 になるのは別の問題だと思うので後で調べます。

Updated by okkez (okkez _) over 12 years ago

  • Assignee changed from matz (Yukihiro Matsumoto) to okkez (okkez _)

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

Actions #14

Updated by okkez (okkez _) over 12 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r34033.
okkez, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0