Oct 24

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'.

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