[Mongrel] Workaround found for request queuing vs. num_processors, accept/close
Robert Mela
rob at robmela.com
Mon Oct 15 17:18:10 EDT 2007
Typo -- the following is incorrect:
With the current Mongrel code, BalancerMember max > 1 and Mongrel
num_processors > 1 triggers the accept/close bug.
should be:
With the current Mongrel code, BalancerMember max > 1 and Mongrel
num_processors = 1 triggers the accept/close bug.
====
Robert Mela wrote:
> I've discovered a setting in mod_proxy_balancer that prevents the
> Mongrel/Rails request queuing vs. accept/close problem from ever being
> reached.
>
> For each BalancerMember
>
> - max=1 -- this caps the maximum number of connections Apache will
> open a BalancerMember to '1'
> - acquire=N max amount of time (N seconds) to wait to acquire a
> connection to a balancer member
>
> So, at a minimum:
>
> BalancerMember http://foo max=1 acquire=1
>
> and I'm using
>
> BalancerMember http://127.0.0.1:9000 max=1 keepalive=on acquire=1
> timeout=1
>
> =====
>
> I experimented with three mongrel servers, and tied one up for 60
> seconds at a time calling "sleep" in a handler.
>
> Without the "acquire" parameter mod_proxy_balancer's simple
> round-robin scheme blocked waiting when it reached a busy
> BalancerManager, effectively queuing the request. With "acquire" set
> the balancer stepped over the busy BalancerMember and continue
> searching through it's round-robin cycle.
>
> So, whether or not Mongrel's accept/close and request queuing are
> issues, there is a setting in mod_proxy_balancer that prevents either
> problem from being triggered.
>
> At a bare minimum, for a single-threaded process running in Mongrel
>
> BalancerMember http://127.0.0.1:9000 max=1 acquire=1
> BalancerMember http://127.0.0.1:9001 max=1 acquire=1
> ...
>
> With all BalancerMembers busy Apache returns a 503 Server Busy, which
> is a heck of a lot more appropriate than 502 proxy error.
>
> ======
>
> It turns out that having Mongrel reap threads before calling accept
> both queueing in Mongrel and prevents Mongrel's accept/close behavior.
>
> But BalancerMembers in mod_proxy_balancer will still need "acquire" to
> be set -- otherwise proxy client threads will sit around waiting for
> Mongrel to call accept -- effectively queuing requests in Apache.
>
> Since max=1 acquire=1 steps around the queuing problem altogether, the
> reap-before-accept fix, though more correct, is of no practical benefit.
>
> ====
>
> With the current Mongrel code, BalancerMember max > 1 and Mongrel
> num_processors > 1 triggers the accept/close bug.
>
> Likewise, BalancerMember max >1 with Mongrel num_processors > 1 runs
> into Mongrel's request queuing....
>
> ====
>
> Conclusion ---
>
> I'd like to see Mongrel return a 503 Server Busy when an incoming
> request hits the num_processor limit.
>
> For practical use, the fix to the problems is in configuring
> mod_proxy_balancer such that it shields against encountering either
> issue.
>
>
>
>
>
>
> _______________________________________________
> Mongrel-users mailing list
> Mongrel-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/mongrel-users
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rob.vcf
Type: text/x-vcard
Size: 116 bytes
Desc: not available
Url : http://rubyforge.org/pipermail/mongrel-users/attachments/20071015/e891aa75/attachment.vcf
More information about the Mongrel-users
mailing list