Apache, Semaphore Arrays und „No space left on device“

Als ich meinen Apache letztens neustarten wollte wolle er nicht mehr. Im Error-Log stand „no space left on device“ oder so ähnlich. Direkt mal mit df -h gecheckt – ~90GB Platz. Was ist denn hier los?

Die Antwort: Apache war die Tage vorher des öfteren abgestürzt/eingefroren und ich musste ihn unsanft mittels killall -9 apache2 abschießen. Die hinterließ wohl ziemlich viel Müll im RAM – und darauf scheint sich diese Fehlermeldung wohl zu beziehen.

ipcs -s | grep www-data

brachte mir gefühlte 500 „Semaphore Arrays“ (der Schalter -s zeigt semaphore Arrays an, grep www-data filtert alle semaphoren Arrays des Apache-Benuzers www-data).

Wie werde ich die blöden verwaisten Arrays nun ohne Neustart wieder los? (haha, wir sind ja hier nicht unter Windows unterwegs :) )

Mittels:

ipcs -s | grep www-data | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'

werden alle semaphoren Arrays des Benutzers www-data aus dem Speicher gelöscht.

Danach ließ sich Apache auch wieder starten.

Wie genau da nun was zusammenhängt, was genau diese Semaphoren Arrays sind, woher die kommen und wie ich sowas in Zukunft vermeiden kann ist mir schleierhaft, das ist eine Ebene zu niedrig für meinen Verstand. :D