The Geek Diary
inlägget förklarar hur kernel semaphore gränser kan ändras i en CentOS/RHEL server.
kärnparametrar för att ställa in semaforgränser
kärnparametrarna för att ställa in semaforgränserna är:
kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNISEMMSL - max semaphores per arraySEMMNS - max semaphores system wideSEMOPM - max ops per semop callSEMMNI - max number of arrays
ändra Semaforgränser
om en gräns behöver ändras bör det beaktas att (max antal arrayer)*(max semaforer per array) >= (max semaforer systemövergripande). Inget behov av att ha fler semaforer systemomfattande om de begränsas av mängden av ett möjligt antal arrayer med max semaforer per den.
till exempel:
# sysctl -a| grep kernel.semkernel.sem = 250 32000 32 128
för det här exemplet måste vi öka max semaforer per matrisgräns från 128 till 192. Max semaphores systemövergripande kan också ökas till 48000 ( 250*192 = 48000 >= 32000) eller hålls som 32000. I detta scenario hålls det vid 32000.
för att ställa in kärnparametern dynamiskt, dvs utan behov av omstart av servern.
# sysctl -w kernel.sem="250 32000 32 192"kernel.sem = 250 32000 32 192
om allt är bra med systemet som förväntat, ändra kärnparametern genom att lägga till den i /etc/sysctl.conf-fil för att säkerställa att värdet kvarstår efter omstart av servern.
# cat /etc/sysctl.conf | grep kernel.semkernel.sem = 250 32000 32 192
om du väljer att ställa in den direkt i filen utan att använda sysctl-w måste du ladda om filen:
# sysctl -p
du kan verifiera gränser som för närvarande ställs in av:
# ipcs -ls------ Semaphore Limits --------max number of arrays = 192max semaphores per array = 250max semaphores system wide = 32000max ops per semop call = 32semaphore max value = 32767