perlbal(reverse proxy role) timing out for slow 'reproxy'
dormando at rydia.net
Wed Sep 19 03:36:52 UTC 2007
Thanks for the test case!
I won't have time to look into this for a while, so if someone else on
the list can help out, please do!
Hemant Bist wrote:
> Hi, I am able to reproduce this with a simple cgi script that keeps on
> writing to stdout. (Attached). The error happens within 10 sec of the
> max_idle_timeout. I see the following messages when I set the DEBUG env
> Backend Perlbal::BackendHTTP=ARRAY(0x87a13a4) is readable!
> write(Perlbal::ClientProxy=ARRAY(0x87a0a08), <886>"
> Some Random dat...") from (Perlbal::BackendHTTP,
> /usr/share/perl5/Perlbal/BackendHTTP.pm, 562)
> Client (Perlbal::ClientProxy=ARRAY(0x87a0a08)) closing backend
> ====Sample run with timeout set to 60 sec with perbal running on port
> time wget http://192.168.1.52:8090/blodio/forever_internal_redirect.modperl
> => `forever_internal_redirect.modperl.1'
> Connecting to 192.168.1.52:8090 <http://192.168.1.52:8090>... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: unspecified [text/plain]
> [ <=> ]
> 55,818 771.43B/s
> 14:04:24 (856.85 B/s) - `forever_internal_redirect.modperl.1' saved 
> real 1m7.116s
> user 0m0.012s
> sys 0m0.012s
> On 9/17/07, *dormando* <dormando at rydia.net <mailto:dormando at rydia.net>>
> I missed it on my first read through that area. Adjusting that variable
> should fix it for you. The latest SVN will work better since it's
> BackendHTTP.pm does the "client writing" of a response. Thinking if it'd
> still be desired behavior to ensure the client idle's been updated.
> Something else might still be buggy here, since I know I've done
> transfers to a client which take much longer? Can you try testing by
> reproxying a lot more data with a low timeout? Ten or thirty times more
> data than your CGI's presently sending.
> Hemant Bist wrote:
> > Hi Dormando,
> > Really appreciate your reply.
> > In this case, the 'slow server' is a cgi script, so I guess the
> > connection from Perlbal to the slow server will not have http
> > Connection:keep-alive header.
> > And the cgi script does start sending the data within first few
> > and keeps on sending the data.
> > If you think I should NOT be receiving the timeout, please do let me
> > know. I will try to debug it more.
> > On my system, I could reproduce/fix the problem repeatedly by
> > max_idle_time(where you mentioned) and restarting perlbal.(Also
> if I hit
> > the url to the slow server directly taking out the perlbal from the
> > equation, things work fine).
> > [ The reason I updated the max_idle time because I saw 'keep_alive'
> > parameter is only updated in the ClientHTTPBase::event_write.
> > So my "theory" was that perlbal will kill the connection to
> backend slow
> > proxy after 30 sec through Socket::_do_cleanup() function.
> > event_write will not be called because Perbal will have nothing
> to write
> > to the slow proxy after it has sent the get request.
> > ]
> > Thanx,
> > HB
More information about the perlbal