L'Apache que es saltava els semàfors
Vols arrencar l'Apache i a sobre de passar de tu et deixa això al error.log.
[notice] mod_python: Creating 20 session mutexes based on 20 max
processes and 0 max threads.
[error] (28)No space left on device: mod_python: Failed to create
global mutex 0 of 20 (/tmp/mpmtx305410).
Segurament tens així la directiva AcceptMutex d'Apache::
AcceptMutex sysvsem
que, casualment, és el valor per defecte de Debian. Si estàs servint una aplicació amb tendència a causar genocidis dels fills de l'Apache potser t'has quedat sense semàfors. I ara què? Truquem a la Guàrdia Urbana?
Per defecte, el nombre d'arrays de semàfors al kernel de Linux és 128:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
Pots pujar aquest valor amb sysctl o al /proc; el paràmetre del kernel que has de tocar és el kernel.sem. Però valdria més fer neteja dels semàfors que s'han quedat "tirats" i ningú està fent servir.
Atura l'Apache. Fes una ullada als semàfors que ja no haurien d'estar ocupats.
# ipcs -s | grep www-data
Ara, mira fixament aquests semàfors i digue'ls: "Això em fa més mal a mi que a vosaltres". I endavant, BOFH.
# ipcs -s | grep www-data | cut -d' ' -f2 | xargs -n1 ipcrm -s
Naturalment, pots fer un ipcrm -s de cada semaphore-id, un a un. Però això limitaria innecessàriament l'abast dels teus errors.
Tags: apache, codi-lliure, ipc, semaphore