On Mon, Dec 6, 2021 at 3:27 PM Yann Ylavic <ylavic....@gmail.com> wrote:
>
> On Mon, Dec 6, 2021 at 1:53 PM Ruediger Pluem <rpl...@apache.org> wrote:
> >
> > On 12/6/21 1:33 PM, Yann Ylavic wrote:
> > >
> > > How about (modulo brain fart):
> > >     const int N = 1; /* or 2, 3, 4.. */
> > >     int avail_daemons = server_limit - retained->total_daemons;
> > >     int have_room_for_N_restarts = (avail_daemons / N >= 
> > > active_daemons_limit);
> > >     int inactive_daemons = retained->total_daemons - 
> > > retained->active_daemons;
> > >     int do_kill = (have_room_for_N_restarts || inactive_daemons == 0);
> > >     if (do_kill) {
> > >         ap_mpm_podx_signal(retained->buckets[child_bucket].pod,
> > >                            AP_MPM_PODX_GRACEFUL);
> > >     }
> > >     else {
> > >         /* Wait for inactive_daemons to settle down */
> > >     }
> > > ?
> > >
> >
> > Not sure if it is worth it as I think that have_room_for_N_restarts will 
> > only rarely be true.
>
> You are right if "server_limit < 2 * active_daemons_limit" but I don't
> think it's a "reasonable" configuration, I wouldn't mind serializing
> kills (i.e. inactive_daemons == 0) in this case to avoid "Scoreboard
> is full" issues on a "loady" restart, all the more with slow-to-exit
> processes (asynchronous, huge timeouts connections). Scoreboard is
> quite cheap in (shared-)memory space, "ServerLimit >= 5 *
> active_daemons_limit" is not what will eat system memory..
>
> So if we take "N = server_limit / active_daemons_limit", the above
> looks like something that could work for killing processes >
> MaxSpareThreads faster (even though I don't find it necessarily
> helpful personally) with a "reasonable" configuration.

Argh no sorry for the babbling (we don't want to maintain N potential
restarts all the time, one is enough, more is at the admin's
discretion depending on the workflow..).

If we want to stop killing processes to keep a reserve of
active_daemons_limit for a potential graceful restart, the condition
might be:
  int do_kill = (retained->total_daemons == retained->active_daemons
                 || (server_limit - retained->total_daemons >
                     active_daemons_limit));

But after all it might not be your concern nor your priority..

>
> Cheers;
> Yann.

Reply via email to