Réglage des paramètres Linux

Réglage des limites du système et des paramètres du noyau sur RHEL et CentOS.

C05348A3-9AB8-42C9-A6E0-81DB3AC59FEB
           

Les limites par défaut et les paramètres du noyau sous Linux conviennent à un système de base à utilisation relativement faible, mais ces paramètres deviennent rapidement inadéquats sur des implémentations plus robustes et plus occupées.

Le premier problème que la plupart des gens rencontrent est celui des descripteurs de fichiers. Par défaut, les systèmes Linux limitent le nombre de descripteurs de fichiers qu'un processus peut ouvrir à 1024 par processus. Les descripteurs de fichiers sont utilisés pour de nombreuses choses sous Linux, de la lecture et de l'écriture de fichiers à la maintenance des connexions TCP, et cela peut rapidement devenir un goulot d'étranglement qui paralysera votre application.

Vous pouvez utiliser la commande suivante pour afficher vos limites :

ulimit -aH
core file size (blocks)       unlimited
data seg size (kbytes)        unlimited
file size (blocks)            unlimited
max locked memory (kbytes)    unlimited
max memory size (kbytes)      unlimited
open files                    1024
pipe size (512 bytes)         8
stack size (kbytes)           unlimited
cpu time (seconds)            unlimited
max user processes            4094
virtual memory (kbytes)       unlimited

Modification des limites du système

Il n'est plus recommandé de modifier directement les limites dans /etc/security/limits.conf. Au lieu de cela, vous devez créer des fichiers dans /etc/security/limits.d/ (les nombres les plus bas dans le nom du fichier écrasent les valeurs des nombres plus élevés en cas d'entrées conflictuelles).

Voici des exemples de script qui ajouteront des valeurs pour l'utilisateur racine et pour tous les autres utilisateurs lors de la mise en service d'un nouveau serveur. Il est supposé que les applications s'exécutent sous leur propre compte d'utilisateur et que le compte root n'est utilisé que pour le système d'exploitation.

echo "root       soft nofile  4096" > /etc/security/limits.d/20-nproc.conf
echo "root       hard nofile  65535" >> /etc/security/limits.d/20-nproc.conf
echo "*          soft nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          hard nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          soft nproc 131072" >> /etc/security/limits.d/20-nproc.conf
echo "*          hard nproc 131072" >> /etc/security/limits.d/20-nproc.conf

Paramètres avancés du noyau

En plus des limites, les paramètres du noyau Linux peuvent influencer de manière significative le comportement du système, en particulier sous une charge importante.

⚠ Attention :

L'application d'un paramètre de noyau non valide sous Linux empêchera votre système de démarrer. Assurez-vous de sauvegarder votre configuration actuelle et assurez-vous d'avoir un instantané/sauvegarde valide de votre système avant d'apporter des modifications. Bien qu'il soit possible de démarrer votre système en mode de récupération pour modifier le fichier de configuration, ce n'est pas facile et ce n'est pas une approche recommandée. L'espoir n'est pas une stratégie .

Pour certaines applications telles que l'exécution d'un serveur de base de données Oracle occupé, il est recommandé de désactiver certains des services d'auto-réglage tels que tuned ou ktune pour appliquer votre propre réglage.

Le script suivant réglera certaines des valeurs recommandées en fonction de la quantité de mémoire disponible sur le système, veuillez l'adapter à votre propre usage. Les commandes sed sont utilisées pour supprimer des lignes et éviter les doublons dans le fichier de configuration. Notez que ces paramètres ne sont appliqués qu'au démarrage, alors que les commandes sysctl à la fin du script peuvent appliquer ces valeurs immédiatement, le redémarrage du système est le meilleur moyen de s'assurer que les nouvelles valeurs prennent effet.

service tuned stop
chkconfig tuned off
service ktune stop
chkconfig ktune off
 
############ VARIABLES TO CHANGE
# System Global Area (SGA) values from Oracle in Gig
SGA=8
# Oracle user ID
oracle_user=oracle
oracle_user_oid=$(id -g $oracle_user)
 
echo "fs.file-max=65536" > /etc/sysctl.conf
echo "vm.pagecache=40" >> /etc/sysctl.conf
echo "kernel.panic_on_oops=1" >> /etc/sysctl.conf
echo "fs.file-max=6815744" >> /etc/sysctl.conf
echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf
echo "net.core.rmem_default=262144" >> /etc/sysctl.conf
echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default=262144" >> /etc/sysctl.conf
echo "net.core.wmem_max=1048576" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-arptables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables=0" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
 
sed -i -e '/kernel.shmmax/d' /etc/sysctl.conf
sed -i -e '/kernel.shmall/d' /etc/sysctl.conf
 
#Obtain the total memory in the system in bytes:
mem=$(free -b | awk '/Mem/ {print $2}')
 
#Get page size in bytes:
page=$(getconf PAGE_SIZE)
 
#Calculate 75% of the total memory in the system in pages for SHMALL:
all=$(expr $mem \* 75 / 100 / $page + 1)
 
#Multiply the SHMALL value by the page size to get SHMMAX:
max=$(expr $all \* $page)
 
#Set the SHMMAX and the SHMALL values in the /etc/sysctl.conf file:
echo "kernel.shmmax=$max" >> /etc/sysctl.conf
echo "kernel.shmall=$all" >> /etc/sysctl.conf
 
sed -i -e '/kernel.shmmni/d' /etc/sysctl.conf
#Set the maximum number of shared memory segments with SHMMNI in the /etc/sysctl.conf file:
echo "kernel.shmmni=4096" >> /etc/sysctl.conf
 
sed -i -e '/kernel.sem/d' /etc/sysctl.conf
#Recommended minimums for semaphore operations:
#The first value, SEMMSL, is the maximum number of semaphores per semaphore set
#The second value, SEMMNS, defines the total number of semaphores for the system
#The third value, SEMOPM, defines the maximum number of semaphore operations per semaphore call
#The last value, SEMMNI, defines the number of entire semaphore sets for the system
sysctl -w "kernel.sem=250 32000 100 128"
echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
 
sysctl --system
sysctl -p
free -h
Commentaires publiés : 0

Tagged with:
performance