Apache2 mpm-itk und ulimits
Möglicherweise bin ich nicht der einzige, der Apache mit dem sehr empfehlenswerten mpm-itk verwendet. Mit mpm-itk kann man VirtualHosts auf eine schon fast zu einfache Weise unter verschiedenen Systembenutzern ausführen lassen. Einfach die Direktive AssignUserID user group in einem <VirtualHost>-Abschnitt reicht schon aus, um alle Prozesse für diesen Prozess unter einem bestimmten User laufen zu lassen.
Leider funktionieren (zumindest unter Debian 6.0.1 ) bei diesen Usern dann die ulimits nicht mehr. Diese werden in der limits.conf in /etc/security/ definiert und sind manchmal sehr nützlich um Systembenutzer daran zu hindern, das System in die Knie zu zwingen. Da mpm-itk den setuid() Syscall zum Wechseln des Users benutzt, werden die ulimits des Apachen selbst aber ganz einfach vererbt. Glücklicherweise gelten diese dann auch wieder für jeden Benutzer einzeln. Wenn ich also zum Beispiel ein Prozess-Limit von 250 Prozessen pro User anlege, dann werden diese 250 Prozesse nicht unter allen VHosts aufgeteilt, sondern gelten pro Benutzer. So kann man ganz simple und einfach dem Apache alle limits verpassen die man möchte und muss sich sonst gar nicht weiter kümmern. Ich habe das in meinem Fall mit einem Eintrag in /etc/apache2/envvars gelöst:
-
bash -c "ulimit -u 250"
