From: okkez _ <redmine@...>
Date: 2011-12-14T00:41:11+09:00
Subject: [ruby-dev:44986] [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする


Issue #5688 has been updated by okkez _.

Assignee changed from Yukihiro Matsumoto to okkez _

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

----------------------------------------
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: -


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