From: Naohisa Goto <ngotogenome@...>
Date: 2011-12-12T13:31:32+09:00
Subject: [ruby-dev:44973] [ruby-trunk - Bug #5688] Solaris10 で spawn を繰り返すとメモリリークする


Issue #5688 has been updated by Naohisa Goto.


後藤です。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 を繰り返すとメモリリークする
http://redmine.ruby-lang.org/issues/5688

Author: okkez _
Status: Assigned
Priority: Normal
Assignee: Yukihiro Matsumoto
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