Le message explique comment les limites de sémaphore du noyau peuvent être modifiées dans un serveur CentOS/RHEL.
Paramètres du noyau pour définir les limites de sémaphore
Les paramètres du noyau pour définir les limites des sémaphores sont :
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI SEMMSL - max semaphores per array SEMMNS - max semaphores system wide SEMOPM - max ops per semop call SEMMNI - max number of arrays
Modification des limites de sémaphore
Si une limite doit être modifiée, il convient de tenir compte du fait que (nombre max de tableaux)*(max sémaphores par tableau)>=(max sémaphores à l'échelle du système) . Pas besoin d'avoir plus de sémaphores à l'échelle du système s'il est limité par la quantité d'un nombre possible de tableaux avec un maximum de sémaphores.
Par exemple :
# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 128
Pour cet exemple, nous devons augmenter le nombre maximal de sémaphores par limite de tableau de 128 à 192. Le nombre maximal de sémaphores à l'échelle du système peut également être augmenté à 48 000 ( 250*192 =48 000>=32 000) ou conservé à 32 000. Dans ce scénario, il est maintenu à 32000.
Pour définir les paramètres du noyau de manière dynamique, c'est-à-dire sans avoir besoin de redémarrer le serveur.
# sysctl -w kernel.sem="250 32000 32 192" kernel.sem = 250 32000 32 192
Si tout va bien avec le système comme prévu, modifiez le paramètre du noyau en l'ajoutant au fichier /etc/sysctl.conf pour garantir que la valeur persiste après le redémarrage du serveur.
# cat /etc/sysctl.conf | grep kernel.sem kernel.sem = 250 32000 32 192
Si vous choisissez de le définir directement dans le fichier sans utiliser le sysctl -w, vous devrez recharger le fichier :
# sysctl -p
Vous pouvez vérifier les limites actuellement définies par :
# ipcs -ls ------ Semaphore Limits -------- max number of arrays = 192 max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 32 semaphore max value = 32767
Un sémaphore est comme un compteur utilisé pour contrôler l'accès aux ressources partagées par plusieurs processus. Il est souvent utilisé comme mécanisme de verrouillage pour empêcher les processus d'accéder à une ressource particulière pendant qu'un autre processus y exécute des opérations. La valeur du sémaphore peut être incrémentée ou décrémentée jusqu'au maximum défini par la variable SEMVMX, "semaphore max value".