Příspěvek vysvětluje, jak lze změnit limity semaforu jádra na serveru CentOS/RHEL.
Parametry jádra pro nastavení limitů semaforu
Parametry jádra pro nastavení limitů semaforu jsou:
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
Změna limitů semaforu
Pokud je třeba změnit limit, je třeba vzít v úvahu, že (maximální počet polí)*(maximální počet semaforů na pole)>=(maximální počet semaforů v celém systému) . Není třeba mít více semaforů v celém systému, pokud je omezeno množstvím možného počtu polí s maximálním počtem semaforů na to.
Například:
# sysctl -a| grep kernel.sem kernel.sem = 250 32000 32 128
V tomto příkladu potřebujeme zvýšit maximální limit semaforů na pole ze 128 na 192. Maximální počet semaforů v celém systému lze také zvýšit na 48 000 ( 250*192 =48 000>=32 000) nebo ponechat na 32 000. V tomto scénáři je udržována na 32 000.
Chcete-li nastavit parametr jádra dynamicky, tj. bez nutnosti restartování serveru.
# sysctl -w kernel.sem="250 32000 32 192" kernel.sem = 250 32000 32 192
Pokud je se systémem vše v pořádku podle očekávání, upravte parametr jádra jeho přidáním do souboru /etc/sysctl.conf, abyste zajistili, že hodnota přetrvá i po restartu serveru.
# cat /etc/sysctl.conf | grep kernel.sem kernel.sem = 250 32000 32 192
Pokud se rozhodnete jej nastavit přímo v souboru bez použití sysctl -w, budete muset soubor znovu načíst:
# sysctl -p
Aktuálně nastavené limity můžete ověřit:
# 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
Semafor je jako počítadlo používané k řízení přístupu ke sdíleným zdrojům více procesů. Často se používá jako zamykací mechanismus, který zabraňuje procesům v přístupu k určitému zdroji, zatímco jiný proces na něm provádí operace. Hodnota semaforu může být inkrementována nebo dekrementována až do maxima nastaveného proměnnou SEMVMX, „semafor max value“.