La publicación explica cómo se pueden cambiar los límites de semáforos del kernel en un servidor CentOS/RHEL.
Parámetros del kernel para establecer límites de semáforos
Los parámetros del kernel para establecer los límites de semáforos son:
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
Cambio de límites de semáforos
Si es necesario cambiar un límite, se debe tener en cuenta que (número máximo de matrices)*(máximo de semáforos por matriz)>=(máximo de semáforos en todo el sistema) . No es necesario tener más semáforos en todo el sistema si está limitado por la cantidad de un número posible de matrices con semáforos máximos por ella.
Por ejemplo:
# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 128
Para este ejemplo, necesitamos aumentar el límite máximo de semáforos por matriz de 128 a 192. El máximo de semáforos en todo el sistema también se puede aumentar a 48000 (250*192 =48000>=32000) o mantenerse como 32000. En este escenario, se mantiene en 32000.
Para establecer el parámetro del núcleo de forma dinámica, es decir, sin necesidad de reiniciar el servidor.
# sysctl -w kernel.sem="250 32000 32 192" kernel.sem = 250 32000 32 192
Si todo está bien con el sistema como se esperaba, modifique el parámetro del kernel agregándolo al archivo /etc/sysctl.conf para asegurarse de que el valor persista después de reiniciar el servidor.
# cat /etc/sysctl.conf | grep kernel.sem kernel.sem = 250 32000 32 192
Si elige configurarlo directamente en el archivo sin usar sysctl -w, deberá volver a cargar el archivo:
# sysctl -p
Puede verificar los límites establecidos actualmente por:
# 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 semáforo es como un contador utilizado para controlar el acceso a recursos compartidos por múltiples procesos. A menudo se utiliza como un mecanismo de bloqueo para evitar que los procesos accedan a un recurso en particular mientras otro proceso realiza operaciones en él. El valor del semáforo se puede incrementar o disminuir hasta el máximo establecido por la variable SEMVMX, "valor máximo del semáforo".