Skip to content

Instantly share code, notes, and snippets.

@gautiermichelin
Last active March 13, 2025 19:32
Show Gist options
  • Save gautiermichelin/14fb199a0b3b6ec1cf236f71814dfc7e to your computer and use it in GitHub Desktop.
Save gautiermichelin/14fb199a0b3b6ec1cf236f71814dfc7e to your computer and use it in GitHub Desktop.
improve_performances.sh
#!/bin/bash
update_config_param() {
local param_name="$1"
local config_file="$2"
local new_value="$3"
if [[ ! -f "$config_file" ]]; then
echo "Erreur : Le fichier $config_file n'existe pas."
return 1
fi
if grep -qE "^[[:space:]]*$param_name[[:space:]]*=" "$config_file"; then
# Modifier la valeur existante non commentée
sed -i -E "s|^[[:space:]]*$param_name[[:space:]]*=.*|$param_name=$new_value|" "$config_file"
elif grep -qE "^[[:space:]]*#[[:space:]]*$param_name[[:space:]]*=" "$config_file"; then
# Décommenter et modifier la valeur, même avec des espaces après #
sed -i -E "s|^[[:space:]]*#[[:space:]]*$param_name[[:space:]]*=.*|$param_name=$new_value|" "$config_file"
else
# Ajouter à la fin du fichier
echo "$param_name=$new_value" >> "$config_file"
fi
}
# Calcul de la RAM totale en Mo
ram=$(echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE) / (1024 * 1024))))
# Calcul des trois quarts de la RAM
three_quarters_ram=$((ram * 3 / 4))
# Calcul de 3/16e de la RAM
three_sixteenths_ram=$((ram * 3 / 16))
# Config MYSQL
update_config_param "key_buffer_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "128M"
update_config_param "max_allowed_packet" "/etc/mysql/mariadb.conf.d/50-server.cnf" "1G"
update_config_param "thread_stack" "/etc/mysql/mariadb.conf.d/50-server.cnf" "192K"
update_config_param "thread_cache_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "8"
mkdir -p /var/log/mysql/ && touch /var/log/mysql/mariadb-slow.log
update_config_param "slow_query_log_file" "/etc/mysql/mariadb.conf.d/50-server.cnf" "/var/log/mysql/mariadb-slow.log"
update_config_param "long_query_time" "/etc/mysql/mariadb.conf.d/50-server.cnf" "10"
update_config_param "log_slow_verbosity" "/etc/mysql/mariadb.conf.d/50-server.cnf" "query_plan,explain"
update_config_param "log-queries-not-using-indexes" "/etc/mysql/mariadb.conf.d/50-server.cnf" "1"
update_config_param "min_examined_row_limit" "/etc/mysql/mariadb.conf.d/50-server.cnf" "10000"
update_config_param "expire_logs_days" "/etc/mysql/mariadb.conf.d/50-server.cnf" "10"
update_config_param "innodb_buffer_pool_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "${three_quarters_ram}M"
update_config_param "innodb_log_file_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "${three_sixteenths_ram}M"
update_config_param "innodb_buffer_pool_instances" "/etc/mysql/mariadb.conf.d/50-server.cnf" "12"
update_config_param "query_cache_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "0"
update_config_param "query_cache_type" "/etc/mysql/mariadb.conf.d/50-server.cnf" "0"
update_config_param "query_cache_limit" "/etc/mysql/mariadb.conf.d/50-server.cnf" "1M"
update_config_param "join_buffer_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "800K"
update_config_param "tmp_table_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "128M"
update_config_param "max_heap_table_size" "/etc/mysql/mariadb.conf.d/50-server.cnf" "128M"
update_config_param "performance_schema" "/etc/mysql/mariadb.conf.d/50-server.cnf" "ON"
# Config Evasive
apt install libapache2-mod-evasive
a2enmod evasive
echo "<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 30
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
#DOSEmailNotify [email protected]
#DOSSystemCommand \"su - someuser -c '/sbin/... %s ...'\"
DOSLogDir \"/var/log/mod_evasive\"
</IfModule>" > /etc/apache2/mods-enabled/evasive.conf
echo "# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
MaxRequestWorkers 25
MaxConnectionsPerChild 10
MaxClients 50
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet" > /etc/apache2/mods-enabled/mpm_prefork.conf
echo "
save \"\"
" >> /etc/redis/redis.conf
find /var/www -type f -name *.conf -exec sed -i -E 's|(do_content_caching[[:space:]]*=).*|\1 1|' {} +
mkdir -p /var/log/mod_evasive
redis-cli flushall
# Reload services
service apache2 restart
service mysql restart
service redis restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment