Reduce unnecessary apache restarts
Systemd limits the total number of restarts that a service can undergo
in a short period of time. On faster nodes all of our apache restarts
hit that limit and we eventually fail. Mitigate this by removing
unnecessary restarts.
Change-Id: I425bb9eec525d82372f05edc63e4fb931e5a4887
diff --git a/lib/apache b/lib/apache
index fc174f3..15b4297 100644
--- a/lib/apache
+++ b/lib/apache
@@ -53,13 +53,16 @@
# Enable apache mod and restart apache if it isn't already enabled.
function enable_apache_mod {
local mod=$1
+ local should_restart=$2
# Apache installation, because we mark it NOPRIME
if is_ubuntu; then
# Skip mod_version as it is not a valid mod to enable
# on debuntu, instead it is built in.
if [[ "$mod" != "version" ]] && ! a2query -m $mod ; then
sudo a2enmod $mod
- restart_apache_server
+ if [[ "$should_restart" != "norestart" ]] ; then
+ restart_apache_server
+ fi
fi
elif is_fedora; then
# pass
@@ -113,15 +116,18 @@
fi
if is_ubuntu; then
- # we've got to enable proxy and proxy_uwsgi for this to work
- sudo a2enmod proxy
- sudo a2enmod proxy_uwsgi
+ if ! a2query -m proxy || ! a2query -m proxy_uwsgi ; then
+ # we've got to enable proxy and proxy_uwsgi for this to work
+ sudo a2enmod proxy
+ sudo a2enmod proxy_uwsgi
+ restart_apache_server
+ fi
elif is_fedora; then
# redhat is missing a nice way to turn on/off modules
echo "LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so" \
| sudo tee /etc/httpd/conf.modules.d/02-proxy-uwsgi.conf
+ restart_apache_server
fi
- restart_apache_server
}
# install_apache_wsgi() - Install Apache server and wsgi module
diff --git a/lib/tls b/lib/tls
index 0a598e1..cff5c63 100644
--- a/lib/tls
+++ b/lib/tls
@@ -452,6 +452,7 @@
# ===============
function tune_apache_connections {
+ local should_restart=$1
local tuning_file=$APACHE_SETTINGS_DIR/connection-tuning.conf
if ! [ -f $tuning_file ] ; then
sudo bash -c "cat > $tuning_file" << EOF
@@ -494,7 +495,12 @@
MaxRequestsPerChild 0
</IfModule>
EOF
- restart_apache_server
+ if [ "$should_restart" != "norestart" ] ; then
+ # Only restart the apache server if we know we really want to
+ # do so. Too many restarts in a short period of time is treated
+ # as an error by systemd.
+ restart_apache_server
+ fi
fi
}
@@ -509,7 +515,8 @@
# 8190 is the default apache size.
local f_header_size=${6:-8190}
- tune_apache_connections
+ # We don't restart apache here as we'll do it at the end of the function.
+ tune_apache_connections norestart
local config_file
config_file=$(apache_site_config_for $b_service)
@@ -558,7 +565,9 @@
</VirtualHost>
EOF
for mod in headers ssl proxy proxy_http; do
- enable_apache_mod $mod
+ # We don't need to restart here as we will restart once at the end
+ # of the function.
+ enable_apache_mod $mod norestart
done
enable_apache_site $b_service
restart_apache_server