CentOS /proc/sys/fs/epoll/max_user_instances=128 Non ce n’était pas une bonne idée

Suite à la mise à jour de mon serveur CentOS 5.2 de plesk 8.6 à plesk 9 mon serveur apache 2.2.3 c’est subitement bloqué à 128 requêtes actives en cours. Et pourtant je n’avais fait aucune modifications dans mon httpd.conf que voici (uniquement le prefork) :

StartServers 30
MinSpareServers 40
MaxSpareServers 45
ServerLimit 1000
MaxClients 700
MaxRequestsPerChild 6000

Mon serveur-status était claire : « Je ne dépasse pas les 128 requêtes actives en cours, je m’en tape de ta config apache. »

Parent Server Generation: 0
Server uptime: 25 seconds
Total accesses: 754 – Total Traffic: 6.1 GB
CPU Usage: u9.07 s.12 cu0 cs0 – 36.8% CPU load
128 requests currently being processed, 0 idle workers

WKWWKWWKWWKWWWWKWWWWWWWWWKWWWWWKKWKWKWWWKWWKKKWKWK WKWWWWKKWWKWWW
WWWWWWWWWWKWKKWWWKWWWWWKWWWWWKWWWWCWWWKWKWWWWWWWKW WWWKWWWWKWKKKW
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………………….. …………..
………………………………….

Ce qui d’un point de vue imagé donne ceci (on voit bien le avant et aprés la MAJ):

localhost-apache_processes-day

localhost-apache_processes-month

Après avoir chercher longuement, le bon alrj me donne ce lien accablant : http://www.mail-archive.com/fedora-kernel-list@redhat.com/msg01618.htm.

Et oui, les petit gars de chez Fedora/Centos/redhat ont eu la mauvaise idée de spécifier le nombre d’instance maximum par utilisateur à 128. Ce qui signifie dans le cas d’apache qu’il ne pourra executer que 128 requête active… Mais le même problème va se pauser pour tous les autres applicatifs (postfix, DIG, etc). Je pense qu’ils ont voulut faire ça pour eviter les « fork bomb » même si il existe des solutions moins violente pour eviter ça.

LA SOLUTION :

En attendant qu’une mise à jour sorte la solution la plus simple est d’écrire dans le fichier de configuration une valeur plus élevé. Je vous conseil 1024.

# echo 1024 > /proc/sys/fs/epoll/max_user_instances

Puis de relancer apache.

# /etc/init.d/httpd restart

Et oui c’était pas plus compliqué que cela 🙂