On 12/2/21 6:32 PM, Yann Ylavic wrote:
> 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

My bad. The patch says

retained->total_daemons == active_daemons

but I read

retained->total_daemons == active_daemons_limit

So yes this could work.

Regards

RĂ¼diger

Reply via email to