#! /bin/bash # Rocky9 compatible # script configures system for proper ES Memory HEAP/RAM usage # based on: https://ugosan.org/Locking-Memory-for-production/ . /usr/src/k_framework/main.sh #k_config_details # ---- VARS ----- VERSION="1.0.4" SCRIPT_NAME="ES memory Config" # ---- FUNCTIONS ----- # ---- MAIN ----- k_start # ram/heap check # https://ugosan.org/Locking-Memory-for-production/ SYSTEM_RAM=`awk '/MemTotal/ { printf "%.0f \n", $2/1024/1024 }' /proc/meminfo | xargs` #ES_HEAP_SIZE=`cat $SYSCONFIG | grep "ES_HEAP_SIZE" | awk -F "=" '{print $2}' | tr -d "g" | xargs` # count optimal ES_HEAP_SIZE based on the system RAM # < 8 gb -> 1 gb # 8 - 16 gb -> 2 gb # > 16 gb -> 4 gb if [ $SYSTEM_RAM -lt 8 ]; then ES_HEAP_SIZE_OPTIMAL=1; elif [ $SYSTEM_RAM -lt 16 ]; then ES_HEAP_SIZE_OPTIMAL=2; else ES_HEAP_SIZE_OPTIMAL=4; fi sed -i "s|.*ES_HEAP_SIZE.*\+|ES_HEAP_SIZE=${ES_HEAP_SIZE_OPTIMAL}g|g" /etc/sysconfig/elasticsearch report "ES_HEAP_SIZE=${ES_HEAP_SIZE_OPTIMAL}g in /etc/sysconfig/elasticsearch" 0 sed -i "s|.*ES_JAVA_OPTS.*\+|ES_JAVA_OPTS=\"-Xms${ES_HEAP_SIZE_OPTIMAL}g -Xmx${ES_HEAP_SIZE_OPTIMAL}g\"|g" /etc/sysconfig/elasticsearch report "ES_JAVA_OPTS=\"-Xms${ES_HEAP_SIZE_OPTIMAL}g -Xmx${ES_HEAP_SIZE_OPTIMAL}g in /etc/sysconfig/elasticsearch" 0 sed -i "s|.*MAX_LOCKED_MEMORY.*\+|MAX_LOCKED_MEMORY=unlimited|g" /etc/sysconfig/elasticsearch report "MAX_LOCKED_MEMORY=unlimited in /etc/sysconfig/elasticsearch" 0 echo "elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited" > /etc/security/limits.d/elasticsearch.conf report "/etc/security/limits.d/elasticsearch.conf updated" 0 sed -i "s|.*LimitMEMLOCK.*\+|LimitMEMLOCK=infinity|g" /usr/lib/systemd/system/elasticsearch.service report "LimitMEMLOCK=infinity in /usr/lib/systemd/system/elasticsearch.service" 0 if cat /etc/elasticsearch/elasticsearch.yml | grep -q "bootstrap.memory_lock"; then sed -i "s|.*bootstrap.memory_lock.*\+|bootstrap.memory_lock: true|g" /etc/elasticsearch/elasticsearch.yml else echo "bootstrap.memory_lock: true" >> /etc/elasticsearch/elasticsearch.yml fi report "bootstrap.memory_lock: true in /etc/elasticsearch/elasticsearch.yml" 0 k_detect_os if [[ $centos_version == 7 || $ROCKY9 == 1 ]]; then systemctl daemon-reload elif [[ $centos_version == 6 ]]; then # not sure what to do on centos 6 : fi report "service elasticsearch restart for changes to take effect" 2 k_exit $EXIT_CODE