Ruby's "stop the world" garbage collector means a process will completely pause during GC, including all threads. You may be better off having twice as many processes at half the ulimit. Fewer threads will be paused at once, and there are fewer objects the VM has to traverse during a GC run.
It's something to investigate when you tune your app.
(This mostly applies to 1.8. I haven't investigated 1.9.)