From: Horacio Sanson Date: 2006-01-19T19:56:10+09:00 Subject: Memory Leak (again) There is a little memory leak in my script I am not able to spot. I have tried everything I found about detecting leaks but no luck. I first tried all the recomendations found here http://theexciter.com/articles/finding-leaking-ruby-objects?commented=1#c000092 I can see the number of objects but the total number of objects does not increment indefinitely but the script keeps consuming memory. I tried this code: ##################################33 Entry = Struct.new( "MEntry", :c, :mem ) class MEntry; def to_s() "#{c} : #{mem}"; end; end GroupEntry = Struct.new( "GroupEntry", :c, :mem, :total ) class GroupEntry; def to_s() "#{c} x#{total}(#{mem})"; end; end def profile_mem groups = {} ObjectSpace.each_object { |x| e = nil begin e = MEntry.new( x.class, Marshal::dump(x).size ) rescue TypeError # undumpable e = MEntry.new( x.class, 0 ) end if groups.has_key? e.c groups[e.c].mem += e.mem groups[e.c].total += 1 else groups[e.c] = GroupEntry.new( e.c, e.mem, 1 ) end } File.open( "mem_log", "a+" ) { |file| total = 0 groups.to_a.sort_by { |e| e[1].mem }.each { |e| file << "#{e[1]} "; total += e[1].mem } file << "TOTAL == #{total}" file << "\n" } end This code gives a list of all objects in ObjectSpace and their memory usage. Also I log the total memory usage. The log indicates that my scripts uses between 3 to 4 megs of memory constantly, that is, it fluctuates between these values but the windows manager indicates that the memory increase all the time and never goes down. Running the script for a day consumes all 2G ram of my machine and causes the script to bail out. So are there any other tips on how to detect memory leaks?? Ruby Memory Validator is only available to accepted beta testers so is not an option for me. I use Windows XP pro with the One-Click Ruby installer (1.8.2) and ActiveRecord (1.13.2). Any ideas are welcome... regards, Horacio