mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
Consolidate random sleeps in periodic scripts
Multiple periodic scripts sleep for a random amount of time in order to mitigate the thundering herd problem. This is bad, because the sum of multiple uniformly distributed random variables approaches a normal distribution, so the problem isn't mitigated as effectively as it would be with a single sleep. This change creates a single configurable anticongestion sleep. periodic will only sleep if at least one script requires it, and it will never sleep more than once per invocation. It also won't sleep if periodic was run interactively, fixing an unrelated longstanding bug. PR: 217055 PR: 210188 Reviewed by: cy MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D10211
This commit is contained in:
parent
ac506a8f5a
commit
86571b9c01
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=316342
@ -22,6 +22,8 @@ periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local"
|
||||
# periodic script dirs
|
||||
local_periodic="/usr/local/etc/periodic"
|
||||
|
||||
# Max time to sleep to avoid causing congestion on download servers
|
||||
anticongestion_sleeptime=3600
|
||||
|
||||
# Daily options
|
||||
|
||||
@ -136,8 +138,6 @@ daily_status_mail_rejects_shorten="NO" # Shorten output
|
||||
|
||||
# 480.leapfile-ntpd
|
||||
daily_ntpd_leapfile_enable="YES" # Fetch NTP leapfile
|
||||
daily_ntpd_avoid_congestion="YES" # Avoid congesting
|
||||
# leapfile sources
|
||||
|
||||
# 480.status-ntpd
|
||||
daily_status_ntpd_enable="NO" # Check NTP status
|
||||
@ -307,6 +307,18 @@ security_status_tcpwrap_period="daily"
|
||||
if [ -z "${source_periodic_confs_defined}" ]; then
|
||||
source_periodic_confs_defined=yes
|
||||
|
||||
# Sleep for a random amount of time in order to mitigate the thundering
|
||||
# herd problem of multiple hosts running periodic simultaneously.
|
||||
# Will not sleep when used interactively.
|
||||
# Will sleep at most once per invocation of periodic
|
||||
anticongestion() {
|
||||
[ -n "$PERIODIC_IS_INTERACTIVE" ] && return
|
||||
if [ -f "$PERIODIC_ANTICONGESTION_FILE" ]; then
|
||||
rm -f $PERIODIC_ANTICONGESTION_FILE
|
||||
sleep `jot -r 1 0 ${anticongestion_sleeptime}`
|
||||
fi
|
||||
}
|
||||
|
||||
# Compatibility with old daily variable names.
|
||||
# They can be removed in stable/11.
|
||||
security_daily_compat_var() {
|
||||
|
@ -13,16 +13,9 @@ fi
|
||||
|
||||
case "$daily_ntpd_leapfile_enable" in
|
||||
[Yy][Ee][Ss])
|
||||
case "$daily_ntpd_avoid_congestion" in
|
||||
[Yy][Ee][Ss])
|
||||
# Avoid dogpiling
|
||||
(sleep $(jot -r 1 0 3600); service ntpd onefetch) &
|
||||
;;
|
||||
*)
|
||||
service ntpd onefetch
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
anticongestion
|
||||
service ntpd onefetch
|
||||
;;
|
||||
esac
|
||||
|
||||
exit $rc
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 26, 2015
|
||||
.Dd March 31, 2015
|
||||
.Dt PERIODIC.CONF 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -133,6 +133,10 @@ respectively.
|
||||
Refer to the
|
||||
.Xr periodic 8
|
||||
manual page for how script return codes are interpreted.
|
||||
.It Va anticongestion_sleeptime
|
||||
.Pq Vt int
|
||||
The maximum number of seconds to randomly sleep in order to smooth bursty loads
|
||||
on a shared resource, such as a download mirror.
|
||||
.El
|
||||
.Pp
|
||||
The following variables are used by the standard scripts that reside in
|
||||
|
@ -76,6 +76,12 @@ fi
|
||||
shift
|
||||
arg=$1
|
||||
|
||||
if [ -z "$PERIODIC_ANTICONGESTION_FILE" ] ; then
|
||||
export PERIODIC_ANTICONGESTION_FILE=`mktemp ${TMPDIR:-/tmp}/periodic.anticongestion.XXXXXXXXXX`
|
||||
fi
|
||||
if tty > /dev/null 2>&1; then
|
||||
export PERIODIC_IS_INTERACTIVE=1
|
||||
fi
|
||||
tmp_output=`mktemp ${TMPDIR:-/tmp}/periodic.XXXXXXXXXX`
|
||||
context="$PERIODIC"
|
||||
export PERIODIC="$arg${PERIODIC:+ }${PERIODIC}"
|
||||
@ -141,3 +147,4 @@ esac
|
||||
} | output_pipe $arg "$context"
|
||||
|
||||
rm -f $tmp_output
|
||||
rm -f $PERIODIC_ANTICONGESTION_FILE
|
||||
|
Loading…
Reference in New Issue
Block a user