From 188d4749bedf2f7a291d3ca75bfcfaffc16fcc5d Mon Sep 17 00:00:00 2001 From: Michael Kroes Date: Tue, 19 Nov 2019 09:57:10 +0100 Subject: [PATCH] Implement nextcloud php-fpm recommended performance tuning settings --- setup/nextcloud.sh | 44 +++++++++++++++++++++++++++++++++++++++++--- setup/web.sh | 8 -------- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/setup/nextcloud.sh b/setup/nextcloud.sh index b38e1f65..f58fac48 100755 --- a/setup/nextcloud.sh +++ b/setup/nextcloud.sh @@ -299,9 +299,47 @@ tools/editconf.py /etc/php/7.2/cli/conf.d/10-opcache.ini -c ';' \ opcache.save_comments=1 \ opcache.revalidate_freq=1 -# Configure the path environment for php-fpm -tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ - env[PATH]=/usr/local/bin:/usr/bin:/bin +# Configure php-fpm based on the amount of memory the machine has +# This is based on the nextcloud manual for performance tuning: https://docs.nextcloud.com/server/17/admin_manual/installation/server_tuning.html +# Some synchronisation issues can occur when many people access the site at once. +# The pm=ondemand setting is used for memory constrained machines < 2GB, this is copied over from PR: 1216 +TOTAL_PHYSICAL_MEM=$(head -n 1 /proc/meminfo | awk '{print $2}' || /bin/true) +if [ $TOTAL_PHYSICAL_MEM -lt 1000000 ] +then + tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ + env[PATH]=/usr/local/bin:/usr/bin:/bin \ + pm=ondemand \ + pm.max_children=8 \ + pm.start_servers=2 \ + pm.min_spare_servers=1 \ + pm.max_spare_servers=3 +elif [ $TOTAL_PHYSICAL_MEM -lt 2000000 ] +then + tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ + env[PATH]=/usr/local/bin:/usr/bin:/bin \ + pm=ondemand \ + pm.max_children=16 \ + pm.start_servers=4 \ + pm.min_spare_servers=1 \ + pm.max_spare_servers=6 +elif [ $TOTAL_PHYSICAL_MEM -lt 3000000 ] +then + tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ + env[PATH]=/usr/local/bin:/usr/bin:/bin \ + pm=dynamic \ + pm.max_children=60 \ + pm.start_servers=6 \ + pm.min_spare_servers=3 \ + pm.max_spare_servers=9 +else + tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ + env[PATH]=/usr/local/bin:/usr/bin:/bin \ + pm=dynamic \ + pm.max_children=120 \ + pm.start_servers=12 \ + pm.min_spare_servers=6 \ + pm.max_spare_servers=18 +fi # If apc is explicitly disabled we need to enable it if grep -q apc.enabled=0 /etc/php/7.2/mods-available/apcu.ini; then diff --git a/setup/web.sh b/setup/web.sh index ed37e5e3..f44d1f0d 100755 --- a/setup/web.sh +++ b/setup/web.sh @@ -48,14 +48,6 @@ tools/editconf.py /etc/php/7.2/fpm/php.ini -c ';' \ tools/editconf.py /etc/php/7.2/fpm/php.ini -c ';' \ default_charset="UTF-8" -# Switch from the dynamic process manager to the ondemand manager see #1216 -tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ - pm=ondemand - -# Bump up PHP's max_children to support more concurrent connections -tools/editconf.py /etc/php/7.2/fpm/pool.d/www.conf -c ';' \ - pm.max_children=8 - # Other nginx settings will be configured by the management service # since it depends on what domains we're serving, which we don't know # until mail accounts have been created.