From: Michael Davis Date: 2001-06-10T01:08:29+09:00 Subject: [ruby-talk:16364] Re: Garbage Collection? Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs. Run top while the script is running and you should see that the ruby process continuously consumes memory. Here is a better example: def test_dump(count) system("ps aux | grep rb | grep -v grep") a = [] 0.upto(9999) {|i| a[i] = rand(999999)} 0.upto(count) do |i| 0.upto(99) do |i| b = Marshal.dump(a) end b = nil GC.start system("ps aux | grep rb | grep -v grep") #print "GC.start\n" end 0.upto(a.nitems-1){|i| a[i] = nil} a = nil system("ps aux | grep rb | grep -v grep") end test_dump(200000) Here is the output: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mdavis 8264 0.0 0.9 2356 1260 pts/8 S 09:45 0:00 ruby test.rb mdavis 8264 99.9 9.2 15420 11800 pts/8 S 09:45 0:04 ruby test.rb mdavis 8264 93.5 17.4 28476 22284 pts/8 S 09:45 0:08 ruby test.rb mdavis 8264 96.7 25.6 41480 32748 pts/8 S 09:45 0:12 ruby test.rb mdavis 8264 92.9 33.8 54488 43220 pts/8 S 09:45 0:16 ruby test.rb mdavis 8264 95.0 41.9 67492 53692 pts/8 S 09:45 0:20 ruby test.rb mdavis 8264 92.7 50.1 80488 64164 pts/8 S 09:45 0:25 ruby test.rb mdavis 8264 94.2 58.3 93488 74632 pts/8 S 09:45 0:29 ruby test.rb mdavis 8264 92.6 66.5 106488 85108 pts/8 S 09:45 0:33 ruby test.rb mdavis 8264 93.8 74.7 119496 95588 pts/8 S 09:45 0:37 ruby test.rb mdavis 8264 91.0 81.8 132500 104580 pts/8 S 09:45 0:41 ruby test.rb mdavis 8264 87.1 81.3 145496 103948 pts/8 S 09:45 0:46 ruby test.rb mdavis 8264 84.0 80.9 158492 103524 pts/8 S 09:45 0:50 ruby test.rb mdavis 8264 84.0 82.4 171496 105408 pts/8 S 09:45 0:54 ruby test.rb mdavis 8264 81.8 81.8 184496 104660 pts/8 S 09:45 0:58 ruby test.rb mdavis 8264 81.1 81.3 197508 103968 pts/8 S 09:45 1:03 ruby test.rb mdavis 8264 80.4 82.1 210484 104996 pts/8 S 09:45 1:07 ruby test.rb mdavis 8264 79.8 79.8 223500 102088 pts/8 S 09:45 1:11 ruby test.rb mdavis 8264 78.4 79.4 236504 101616 pts/8 S 09:45 1:16 ruby test.rb mdavis 8264 78.8 81.4 249448 104112 pts/8 S 09:45 1:20 ruby test.rb mdavis 8264 79.1 81.6 262516 104324 pts/8 S 09:45 1:24 ruby test.rb mdavis 8264 78.1 81.4 275452 104172 pts/8 S 09:45 1:29 ruby test.rb mdavis 8264 77.8 80.6 288508 103088 pts/8 S 09:45 1:33 ruby test.rb mdavis 8264 77.4 82.4 301516 105388 pts/8 S 09:45 1:37 ruby test.rb mdavis 8264 76.6 81.3 314456 103968 pts/8 S 09:45 1:41 ruby test.rb mdavis 8264 76.3 81.6 327524 104396 pts/8 S 09:45 1:46 ruby test.rb mdavis 8264 76.1 81.3 340460 103992 pts/8 S 09:45 1:50 ruby test.rb mdavis 8264 75.4 81.5 353516 104244 pts/8 S 09:45 1:54 ruby test.rb mdavis 8264 75.2 80.3 366520 102740 pts/8 S 09:45 1:58 ruby test.rb mdavis 8264 75.1 80.7 379464 103208 pts/8 S 09:45 2:03 ruby test.rb mdavis 8264 75.4 81.4 392464 104176 pts/8 S 09:45 2:07 ruby test.rb mdavis 8264 75.4 81.4 405468 104160 pts/8 S 09:45 2:11 ruby test.rb mdavis 8264 74.8 80.3 418524 102772 pts/8 S 09:45 2:16 ruby test.rb test.rb:40:in `dump': failed to allocate memory(realloc) (fatal) from test.rb:40:in `test_dump' from test.rb:39:in `upto' from test.rb:39:in `test_dump' from test.rb:38:in `upto' from test.rb:38:in `test_dump' from test.rb:90 It appears to taper off in its use of memory but the ruby process (looking at it using top) still increases steadily in it use of memory until it runs out. -----Original Message----- From: ts [SMTP:decoux@moulon.inra.fr] Sent: Saturday, June 09, 2001 9:14 AM To: ruby-talk ML Cc: ruby-talk@ruby-lang.org Subject: [ruby-talk:16361] Re: Garbage Collection? >>>>> "M" == Michael Davis writes: M> I have narrowed the issue down a little further. It appears to be related M> to Marshal.dump() and/or the << method, the += method does not eat memory. pigeon% cat b.rb #!/usr/bin/ruby def test_str_cat(count) a = '' 0.upto(count) do |i| system("ps aux | grep b.rb | grep -v grep") if i % 10 == 1 0.upto(99999) do |i| a << 'aaaa' end a = '' GC.start end end system("ps aux | head -1") test_str_cat(200) system("ps aux | grep b.rb | grep -v grep") pigeon% pigeon% b.rb USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ts 25282 50.0 0.5 2476 1308 pts/0 S 17:08 0:00 ruby ./b.rb ts 25282 99.9 0.5 2476 1308 pts/0 S 17:08 0:05 ruby ./b.rb ts 25282 99.9 0.5 2476 1308 pts/0 S 17:08 0:10 ruby ./b.rb ts 25282 99.9 0.5 2476 1308 pts/0 S 17:08 0:15 ruby ./b.rb ts 25282 99.5 0.5 2476 1308 pts/0 S 17:08 0:19 ruby ./b.rb ts 25282 99.0 0.5 2476 1308 pts/0 S 17:08 0:24 ruby ./b.rb ts 25282 98.7 0.5 2476 1308 pts/0 S 17:08 0:29 ruby ./b.rb ts 25282 98.4 0.5 2476 1308 pts/0 S 17:08 0:34 ruby ./b.rb ts 25282 98.3 0.5 2476 1308 pts/0 S 17:08 0:39 ruby ./b.rb ts 25282 98.1 0.5 2476 1308 pts/0 S 17:08 0:44 ruby ./b.rb ts 25282 98.0 0.5 2476 1308 pts/0 S 17:08 0:49 ruby ./b.rb ts 25282 97.9 0.5 2476 1308 pts/0 S 17:08 0:53 ruby ./b.rb ts 25282 97.8 0.5 2476 1308 pts/0 S 17:08 0:58 ruby ./b.rb ts 25282 97.8 0.5 2476 1308 pts/0 S 17:08 1:03 ruby ./b.rb ts 25282 97.7 0.5 2476 1308 pts/0 S 17:08 1:08 ruby ./b.rb ts 25282 97.7 0.5 2476 1308 pts/0 S 17:08 1:13 ruby ./b.rb ts 25282 97.6 0.5 2476 1308 pts/0 S 17:08 1:18 ruby ./b.rb ts 25282 97.6 0.5 2476 1308 pts/0 S 17:08 1:22 ruby ./b.rb ts 25282 97.5 0.5 2476 1308 pts/0 S 17:08 1:27 ruby ./b.rb ts 25282 97.5 0.5 2476 1308 pts/0 S 17:08 1:32 ruby ./b.rb ts 25282 97.5 0.5 2476 1308 pts/0 S 17:08 1:37 ruby ./b.rb pigeon% M> I wonder if it could be an issue with realloc not interacting properly M> with garbage collection. Any suggestions? What is your OS ? Guy Decoux