From ae4e1358a297d4e6ea5d0be6a016794c4ea64f10 Mon Sep 17 00:00:00 2001 From: andryyy Date: Thu, 17 Jan 2019 20:25:38 +0100 Subject: [PATCH] [Solr] Refuse to start with RAM lt 2 GB [Config/Update] Set limits and change descriptions for Solr --- data/Dockerfiles/solr/docker-entrypoint.sh | 16 +++++++++++++++- generate_config.sh | 21 +++++++++++++-------- update.sh | 1 + 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/data/Dockerfiles/solr/docker-entrypoint.sh b/data/Dockerfiles/solr/docker-entrypoint.sh index 2d9d17521..430e63424 100755 --- a/data/Dockerfiles/solr/docker-entrypoint.sh +++ b/data/Dockerfiles/solr/docker-entrypoint.sh @@ -6,6 +6,16 @@ if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then exit 0 fi +MEM_TOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + +if [[ "${1}" != "--bootstrap" ]]; then + if [ ${MEM_TOTAL} -lt "2097152" ]; then + echo "System memory less than 2 GB, skipping Solr..." + sleep 365d + exit 0 + fi +fi + set -e # allow easier debugging with `docker run -e VERBOSE=yes` @@ -158,7 +168,11 @@ function solr_config() { # fixing volume permission [[ -d /opt/solr/server/solr/dovecot/data ]] && chown -R solr:solr /opt/solr/server/solr/dovecot/data -sed -i 's/#SOLR_HEAP="512m"/SOLR_HEAP="'${SOLR_HEAP:-1024}'m"/g' /opt/solr/bin/solr.in.sh +if [[ "${1}" != "--bootstrap" ]]; then + sed -i '/SOLR_HEAP=/c\SOLR_HEAP="'${SOLR_HEAP:-1024}'m"' /opt/solr/bin/solr.in.sh +else + sed -i '/SOLR_HEAP=/c\SOLR_HEAP="256m"' /opt/solr/bin/solr.in.sh +fi # start a Solr so we can use the Schema API, but only on localhost, # so that clients don't see Solr until we have configured it. diff --git a/generate_config.sh b/generate_config.sh index 922fe5753..bb1215547 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -50,9 +50,10 @@ done MEM_TOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo) -if [ ${MEM_TOTAL} -le "1572864" ]; then - echo "Installed memory is less than 1.5 GiB. It is recommended to disable ClamAV to prevent out-of-memory situations." - read -r -p "Do you want to disable ClamAV now? ClamAV can be re-enabled by setting SKIP_CLAMD=n in mailcow.conf. [Y/n] " response +if [ ${MEM_TOTAL} -le "2621440" ]; then + echo "Installed memory is <= 2.5 GiB. It is recommended to disable ClamAV to prevent out-of-memory situations." + echo "ClamAV can be re-enabled by setting SKIP_CLAMD=n in mailcow.conf." + read -r -p "Do you want to disable ClamAV now? [Y/n] " response case $response in [nN][oO]|[nN]) SKIP_CLAMD=n @@ -62,13 +63,17 @@ if [ ${MEM_TOTAL} -le "1572864" ]; then ;; esac else - SKIP_CLAMD=n + SKIP_CLAMD=n fi -if [ ${MEM_TOTAL} -le "3670016" ]; then - echo "Installed memory is less than 3.5 GiB. It is highly recommended to disable Solr to prevent out-of-memory situations." - echo "Solr is a prone to run OOM and should be monitored. The default Solr heap size is 1024 MiB and should be set according to your expected load in mailcow.conf." - read -r -p "Do you want to disable Solr now (recommended)? Solr can be re-enabled by setting SKIP_SOLR=n in mailcow.conf. [Y/n] " response +if [ ${MEM_TOTAL} -le "2097152" ]; then + echo "Disabling Solr on low-memory system." + SKIP_SOLR=y +elif [ ${MEM_TOTAL} -le "3670016" ]; then + echo "Installed memory is <= 3.5 GiB. It is recommended to disable Solr to prevent out-of-memory situations." + echo "Solr is a prone to run OOM and should be monitored. The default Solr heap size is 1024 MiB and should be set in mailcow.conf according to your expected load." + echo "Solr can be re-enabled by setting SKIP_SOLR=n in mailcow.conf but will refuse to start with less than 2 GB total memory." + read -r -p "Do you want to disable Solr now? [Y/n] " response case $response in [nN][oO]|[nN]) SKIP_SOLR=n diff --git a/update.sh b/update.sh index 1e46e8ed5..140a19fd6 100755 --- a/update.sh +++ b/update.sh @@ -219,6 +219,7 @@ for option in ${CONFIG_ARRAY[@]}; do echo "Adding new option \"${option}\" to mailcow.conf" echo '# Solr heap size, there is no recommendation, please see Solr docs.' >> mailcow.conf echo '# Solr is a prone to run OOM on large systems and should be monitored. Unmonitored Solr setups are not recommended.' >> mailcow.conf + echo '# Solr will refuse to start with total system memory below or equal to 2 GB.' >> mailcow.conf echo "SOLR_HEAP=1024" >> mailcow.conf fi elif ! grep -q ${option} mailcow.conf; then