From: Torbjorn T. <to...@to...> - 2006-11-01 12:49:49
|
If Yaws deliver requests faster than what the rest of the system can handle them, it would be nice to be able to throttle the amount of incoming requests. I was thinking of adding a global parameter: REQUESTS_PER_SECOND=<integer between 1 and 1000> The yaws_server.erl could be modified like this: -------------------------------------------------- do_accept(GS) when GS#gs.ssl == nossl -> ?Debug("wait in accept ... ~n",[]), + sleep(GS#gs.req_per_sec), gen_tcp:accept(GS#gs.l); do_accept(GS) when GS#gs.ssl == ssl -> + sleep(GS#gs.req_per_sec), ssl:accept(GS#gs.l,10000). +%% Other values make no sense +sleep(I) when I>1,I=<1000 -> + Timeout = trunc(1000/I), + receive after Timeout -> true end; +sleep(_) -> + true. ------------------------------------------------- So what do you think about this? Cheers, Tobbe |
From: Christian S <ch...@gm...> - 2006-11-01 13:03:40
|
On 11/1/06, Torbjorn Tornkvist <to...@to...> wrote: > If Yaws deliver requests faster than what the rest > of the system can handle them, it would be nice > to be able to throttle the amount of incoming requests. > > I was thinking of adding a global parameter: How about an interface to change this value while running? So one could regulate it based on application-specific load measurements. |
From: Fredrik T. <ft...@it...> - 2006-11-01 13:04:10
|
Torbjorn Tornkvist <to...@to...> wrote: > If Yaws deliver requests faster than what the rest > of the system can handle them, it would be nice > to be able to throttle the amount of incoming requests. > > I was thinking of adding a global parameter: > > REQUESTS_PER_SECOND=<integer between 1 and 1000> > > The yaws_server.erl could be modified like this: > -------------------------------------------------- > do_accept(GS) when GS#gs.ssl == nossl -> > ?Debug("wait in accept ... ~n",[]), > + sleep(GS#gs.req_per_sec), > gen_tcp:accept(GS#gs.l); > do_accept(GS) when GS#gs.ssl == ssl -> > + sleep(GS#gs.req_per_sec), > ssl:accept(GS#gs.l,10000). > > +%% Other values make no sense > +sleep(I) when I>1,I=<1000 -> > + Timeout = trunc(1000/I), > + receive after Timeout -> true end; > +sleep(_) -> > + true. > ------------------------------------------------- > > So what do you think about this? Without looking at how the Yaws request receiving code looks like, it appears to me that REQUESTS_PER_SECOND is rather SLEEPTIME_PER_REQUEST? Besides that, couldn't such a rate limiting be made more dynamic if it was based on the run queue length as reported by erlang:statistics/1? Ulf Wiger indicated to me that that could be a good source of indication that you are overloaded, and should start backing off. I've been planning on implementing it in YXA but haven't found the time yet so I cannot tell you if it works in practice. /Fredrik |
From: Torbjorn T. <to...@to...> - 2006-11-01 13:27:34
|
Fredrik Thulin wrote: > > Without looking at how the Yaws request receiving code looks like, it > appears to me that REQUESTS_PER_SECOND is rather SLEEPTIME_PER_REQUEST? Hm..yes..or perhaps MAX_REQUESTS_PER_SECOND. > > Besides that, couldn't such a rate limiting be made more dynamic if it > was based on the run queue length as reported by erlang:statistics/1? But if you have a large system, involving heavy use of mnesia etc, it is hard to measure this. This is an easy way (perhaps too easy?) to protect the rest of the system from being overloaded. --Tobbe > Ulf Wiger indicated to me that that could be a good source of indication > that you are overloaded, and should start backing off. I've been > planning on implementing it in YXA but haven't found the time yet so I > cannot tell you if it works in practice. > > /Fredrik > > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 |
From: Torbjorn T. <to...@to...> - 2006-11-01 13:22:04
|
Christian S wrote: > On 11/1/06, Torbjorn Tornkvist <to...@to...> wrote: >> If Yaws deliver requests faster than what the rest >> of the system can handle them, it would be nice >> to be able to throttle the amount of incoming requests. >> >> I was thinking of adding a global parameter: > > How about an interface to change this value while running? So one could > regulate it based on application-specific load measurements. Yes, it could be a good idea. --Tobbe |
From: Christian S <ch...@gm...> - 2006-11-01 13:40:42
|
On 11/1/06, Torbjorn Tornkvist <to...@to...> wrote: > Christian S wrote: > > How about an interface to change this value while running? So one could > > regulate it based on application-specific load measurements. > > Yes, it could be a good idea. More thinking about the issue. To make a working automatic controller one also needs information about current request frequency. Otherwise it is hard to know how sleep time should be modified to modify throttling in the desired direction. |