diff options
author | Christopher Faulet <cfaulet@haproxy.com> | 2023-05-16 18:07:51 +0200 |
---|---|---|
committer | Christopher Faulet <cfaulet@haproxy.com> | 2023-05-17 14:57:10 +0200 |
commit | 8bca3cc8c766cada51805631fb1f72475b89bc44 (patch) | |
tree | 86ed677b2a0d66949c8e8bd785c0bd8c91a72b85 | |
parent | 8a46f986151375a314877040f52936a52a8ddcf5 (diff) | |
download | haproxy-8bca3cc8c766cada51805631fb1f72475b89bc44.tar.gz |
MEDIUM: checks: Stop scheduling healthchecks during stopping stage
When the process is stopping, the health-checks are suspended. However the
task is still periodically woken up for nothing. If there is a huge number
of health-checks and if they are woken up in same time, it may lead to a
noticeable CPU consumption for no reason.
To avoid this extra CPU cost, we stop to schedule the health-check tasks
when the proxy is disabled or stopped.
This patch should partially solve the issue #2145.
-rw-r--r-- | src/check.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/check.c b/src/check.c index a440185da..786c1c61c 100644 --- a/src/check.c +++ b/src/check.c @@ -1327,8 +1327,13 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state) } reschedule: - while (tick_is_expired(t->expire, now_ms)) - t->expire = tick_add(t->expire, MS_TO_TICKS(check->inter)); + if (proxy->flags & (PR_FL_DISABLED|PR_FL_STOPPED)) + t->expire = TICK_ETERNITY; + else { + while (tick_is_expired(t->expire, now_ms)) + t->expire = tick_add(t->expire, MS_TO_TICKS(check->inter)); + } + out_unlock: if (check->server) HA_SPIN_UNLOCK(SERVER_LOCK, &check->server->lock); |