I can't say that I've had a memory leak that caused me pain before using Ruby, but this one stopped the show.
None of the suggestions for possible causes was of any help, other than a general opinion that garbage collection in Ruby 1.8.6 had some issues.
So I downloaded ruby 1.8.7 (2008-08-11 patchlevel 72) from http://www.ruby-lang.org/en/downloads/, compiled it and reran the code.
Sorted!
1.8.6 is still the default on the systems I work with. If you run into this problem, the first thing to try is an upgrade to 1.8.7.
To help debugging, this line of code will spit out the current usage (Sorry, I forget where I got it from...)
STDERR.puts 'processBlock ' + `pmap #{Process.pid} | tail -1`[10,40].strip