J'ai un problème avec Apache. Tout a commencé il y a environ une semaine (cela peut donc être lié aux dernières mises à jour du système) - mes outils de surveillance me signalent que le site web ne fonctionne pas. Je l'ai vérifié, et il semble que la requête à un CGI trivial (implémenté en perl) ait pris 30 secondes. Après avoir redémarré Apache, le problème a été résolu pendant quelques heures/jours, puis il s'est reproduit.
Au départ, je soupçonne php, car c'était la seule mise à jour (5.3.15->5.3.18) qui pouvait affecter apache. J'ai essayé de rétablir la version 5.3.15, mais cela n'a pas réglé le problème.
Ensuite, j'ai fait un strace, et on dirait que le retard se produit pendant l'appel syscall clone() :
[pid 26659] 1356268557.675934 clone( <unfinished ...>
[pid 26659] 1356268587.684401 <... clone resumed> child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xa1033768) = 32169 <30.008452>
Le cgi lui-même s'exécute après cela et fonctionne bien et rapidement :
[pid 32169] 1356268587.686614 execve("/var/www/mysite.com/mycgi.cgi", ["/var/www/mysite.com/mycgi.cgi"], [/* 26 vars */]) = 0 <0.000776>
Avez-vous une idée de la raison pour laquelle cela peut se produire ? Comment et pourquoi clone(2) peut bloquer pendant 30 secondes ? ! Et revenir avec succès après cela Il semble qu'il y ait un timeout à l'intérieur de clone() car il y a toujours exactement 30 secondes.
J'utilise un Linux Gentoo durci à jour, un noyau 3.5.4-hardened-r1, apache 2.2.23 (prefork, mod_cgi).
Mise à jour : Je devrais probablement ajouter que ce serveur n'est pas soumis à une charge élevée. Les enfants Apache n'utilisent qu'environ 120/40 Mo (VIRT/RSS). Le serveur a 2GB de RAM, et seulement 400MB utilisés (sans buffers/cache).