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 🙂

5 réflexions sur « CentOS /proc/sys/fs/epoll/max_user_instances=128 Non ce n’était pas une bonne idée »

  1. tu viens de me sauver !

    j’ai mis en prod depuis 1 semaine un nouveau serveur et après une première montée en charge apache arrivait plus à suivre : j’ai touché un peu à tout (maxCli, maxSpare) rien à faire. Pourtant le serveur était 95%idle.

    Après avoir galéré en pensant que c’était les file-descriptor (pourtant ulimit correct) et un patch grsec douteux, je suis tombé sur cette page.

    je vais pouvoir aller dormir 😉

    merci

  2. merci pour cette « astuce », je vais la tester ce soir parce que ça fait des jours que je suis bloqué sur un serveur PRO qui a plus de 8Go de Ram mais mes sites étaient bloqués à certaines heures.
    Après analyse j’ai vu que le nombre de process apache était capé à 128 et après une recherche sur le net je suis tombé sur cette page via le forum WRI
    à cette adresse http://forum.webrankinfo.com/bloque-128-requests-currently-being-processed-t106244.html et en cherchant les mots clés « 128 requests currently being processed »

  3. Merci beaucoup ! J’avais le même problème et je me demandais pourquoi c’était bridé à ce point. Tout s’est débloqué ! Par contre je reviens ici bas donc je me souviens plus des mots clefs qui m’avait fait tomber sur l’article.

  4. Bonjour,

    merci beaucoup pour cette info car j’ai le même soucis…
    Mon site est hébergé chez 1and1 sur un serveur virtuel XL (Centos 5 et plesk 9.5)
    Le site ne fonctionne pas, il n’a pas particulièrement de visite à part les mienne…
    Firewall configuré, pas de rootkit.
    CPU à 0%, 1,5 go de ram dispo, bref repos total.

    Mais le serveur cumul les process.
    Ces process ne sont cumulable que jusqu’à 128 !!!

    Pour être précis les « numproc ».

    J’aurai voulu appliquer votre solution, mais voilà, je n’ai pas de répertoire epoll et encore mois de fichier max_user_instances !

    Comment faire pour régler ce soucis, dois je les créer ?

    Merci par avance de votre réponse.

    Laurent

Laisser un commentaire