2011-05-25 00:35:23
Apache hat keine freie Semaphore
Das ist auch ein kleiner Klassiker, darum sollen dieses Problem und seine Lösung auch nicht unerwähnt bleiben. Es kann vorkommen, dass in einem Apache Error-Log die folgende Zeile auftaucht:
No space left on device (errno: 28)
Eine Prüfung ergibt dann oft, dass auf den (HD-) Devices sehr wohl noch "Space" vorhanden ist. In den Logzeilen findet sich dann auch ein Eintrag wie:
could not create private SSLMutex semaphore
Das liefert dann auch den entscheidenden Hinweis darauf, dass Apache keinen neuen Semaphor (ein klassisches Werkzeug für IPC) erzeugen kann. Die man-page zu semget() führt auch diese Fehlermöglichkeit auf:
# man semget|grep -A4 ENOSPC
   ENOSPC A semaphore set has to be  created  but  the
          system limit for the maximum number of sema-
          phore sets (SEMMNI), or the system wide max-
          imum number of semaphores (SEMMNS), would be
          exceeded.
Das sind bei vielen Hosts oft noch die zu niedrigen Standardwerte:
# cat /proc/sys/kernel/sem 250 32000 32 128
Die man-page proc(5) liefert uns folgende Infos dazu:
   /proc/sys/kernel/sem (since Linux 2.4)
          This file contains 4 numbers defining limits for
          System  V  IPC semaphores.  These fields are, in
          order:
          SEMMSL  The  maximum  semaphores  per semaphore
                  set.
          SEMMNS  A  system-wide  limit  on  the number of
                  semaphores in all semaphore sets.
          SEMOPM  The maximum number  of  operations that
                  may be specified in a semop(2) call.
          SEMMNI  A  system-wide limit on the maximum num-
                  ber of semaphore identifiers.
Eine Zählung der Semaphore des Users "www" liefert das:
# ipcs -s|grep -c www 128
Jetzt stoppen wir Apache, löschen alle "vergessenen" Semaphore, setzen die Werte höher und starten Apache wieder:
# ipcs -s|grep www|cut -d\ -f2|xargs -r -n 1 ipcrm -s # echo '500 64000 32 1024' >/proc/sys/kernel/sem