Unicorn hangs on POST request

Eric Wong normalperson at yhbt.net
Sat Mar 9 21:02:27 UTC 2013

Tom Pesman <tom at tnux.net> wrote:
> Hello,
> I'm trying to fix a problem I'm experiencing with my Rails
> application hosted at Heroku. I've one POST request which hangs and
> with the help of a customized rack-timeout gem
> (https://github.com/tompesman/rack-timeout) I managed to get a
> stacktrace: https://gist.github.com/tompesman/7b13e02d349aacc720e0
> How can I debug this further to get to the bottom of this and is
> this a rack or a unicorn problem?

It's a client or proxy problem.

The request was too large to be transferred within your configured
timeout, or the client or proxy layer was too slow at transferring the
POST to unicorn, or the host running unicorn was too overloaded/slow
to buffer the request.

1) Disk/filesystem/memory speed on the (client|proxy) talking to unicorn
2) Disk/filesystem/memory speed on the host running unicorn.
3) The network link between the (client|proxy) <-> unicorn.

I don't know about Heroku, but nginx will fully buffer the request body
before sending to unicorn, so all 3 factors are within your control.

Does Heroku limit (or allow limiting of) the size of request bodies?

Maybe a bad client sent a gigantic request.  nginx limits request bodies
to 1M by default (client_max_body_size config directive).

[1] unicorn buffers request bodies to TMPDIR via TeeInput

More information about the mongrel-unicorn mailing list