From: Ray Chen Date: 2007-11-17T15:58:12+09:00 Subject: REXML memory consumption My process memory usage has been increasing steadily, and some probing pointed me to REXML. I created a test that consisted of feeding 10 xml files ranging in size from 15kB to 270kB to REXML::Document.new(). The files are fed smallest to largest. I would think that memory usage should return back to ~8 MB since the REXML::Document should go out of scope, and everything should get garbage-collected. Is there something wrong with my understanding of Ruby or does REXML hold onto memory? ===Memory Usage=== USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ray 26354 0.0 0.2 20724 7920 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 0.0 0.2 20912 7988 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 18.0 0.3 24000 11044 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 31.0 0.4 27696 14772 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 44.0 0.5 28752 15812 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 62.0 0.5 28916 15944 pts/9 S+ 22:46 0:00 ruby mem_test2.rb ray 26354 88.0 0.6 34204 21144 pts/9 R+ 22:46 0:00 ruby mem_test2.rb ray 26354 57.5 0.7 37236 24272 pts/9 R+ 22:46 0:01 ruby mem_test2.rb ray 26354 73.5 0.8 38816 25920 pts/9 R+ 22:46 0:01 ruby mem_test2.rb ray 26354 96.0 0.9 42900 29720 pts/9 R+ 22:46 0:01 ruby mem_test2.rb ===Test Code=== require 'rexml/document' def construct(i) #create the string f = File.open("/tmp/#{i}.xml", 'r') str = '' while line = f.gets str << line end f.close #construct the xml xml = REXML::Document.new(str) xml = nil return nil end puts 'USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND' for j in 1..10 construct(j) GC.start puts `ps aux | grep 'ruby mem_test2' | grep -v grep` end -- Posted via http://www.ruby-forum.com/.