Hey Tom,
My bet is that it's actually something to do with beanstalk. When you
tell the beanstalk client to wait for new jobs (I think) it'll block
the entire process until it sees something new. You can test that by
waiting for it to freeze, then pushing a new job to beanstalk. If that
is the case, run your beanstalk client in a new thread. Check out
EM.defer:
http://eventmachine.rubyforge.org/#M000212
--Jeff