On Thu, Dec 2, 2021 at 5:50 PM Ruediger Pluem <rpl...@apache.org> wrote: > > On 12/2/21 4:32 PM, Yann Ylavic wrote: > > > > Or maybe we could simply: > > --- server/mpm/event/event.c (revision 1895394) > > +++ server/mpm/event/event.c (working copy) > > @@ -3186,8 +3186,8 @@ static void perform_idle_server_maintenance(int ch > > * requests. If the server load changes many times, many such > > * gracefully finishing processes may accumulate, filling up the > > * scoreboard. To avoid running out of scoreboard entries, we > > - * don't shut down more processes when the total number of > > processes > > - * is high, until there are more than max_workers/4 idle threads. > > + * don't shut down more processes if there are quiescing ones > > + * already (i.e. retained->total_daemons > active_daemons). > > * > > * XXX It would be nice if we could > > * XXX - kill processes without keepalive connections first > > @@ -3195,13 +3195,7 @@ static void perform_idle_server_maintenance(int ch > > * XXX depending on server load, later be able to resurrect them > > * or kill them > > */ > > - if ((retained->total_daemons <= active_daemons_limit > > - && retained->total_daemons < server_limit) > > - /* The above test won't transition from true to false until a > > child > > - * exits by itself (i.e. MaxRequestsPerChild reached), so the > > below > > - * test makes sure that the situation unblocks when the load > > falls > > - * significantly (regardless of MaxRequestsPerChild, e.g. 0) */ > > - || idle_thread_count > max_workers/4 / num_buckets) { > > + if (retained->total_daemons == active_daemons) { > > Wouldn't this effectively disable shutting down processes until we hit the > limit even if shrinking is desired far before we reach > this?
Possibly not because we are still under: if (idle_thread_count > max_spare_threads / num_buckets) ? > Example: > > MaxRequestWorkers 1000 > ThreadsPerChild 10 > MinSpareThreads 10 > MaxSpareThreads 30 > Serverlimit 105 > StartServers 2 > > In case the server gets 40 connections in parallel after startup it would > spin up to 5 processes if it gets idle afterwards it > would not shutdown children any longer. We are above MaxSpareThreads in this case so it would trigger as soon as it gets idle (unless a graceful was asked during the load, but immediately after all the old gen processes have stopped otherwise). Regards; Yann.