Problèmes avec apache mod_fcgid

J’ai un problème sur plusieurs serveurs plutôt que d’utiliser le module Apache mod_fcgid pour servir un script cgi qui traite la demande (validation de ticket et traitement similaire) puis sert les fichiers sur le serveur en fonction du résultat du traitement.

Je continue à recevoir les erreurs suivantes à plusieurs resockets dans les journaux:

[Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] mod_fcgid: error reading data, FastCGI server closed connection [Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] (32)Broken pipe: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function [Mon Jan 30 23:13:34 2012] [warn] [client 37.8.52.128] mod_fcgid: can't apply process slot for /var/www/cgi-bin/assetx.fcgi 

Ces problèmes entraînent la lenteur du serveur et d’autres fois, le service provoque une erreur d’indisponibilité temporaire.

Les serveurs ont un trafic important sur eux, j’ai actuellement configuré les directives fcgi suivantes comme suit:

 FcgidMaxRequestsPerProcess 0 FcgidMaxProcesses 300 FcgidMinProcessesPerClass 0 FcgidIdleTimeout 240 FcgidIOTimeout 240 FcgidBusyTimeout 300 

la charge moyenne sur les serveurs est normale, le nombre de processus est en moyenne de 250 processus.

J’ai fait des recherches pendant des jours sur cette question, certains disent que c’est un problème de permission, j’ai suivi leur suggestion, n’a pas aidé. J’ai essayé de régler les parameters ci-dessus, ce sont les valeurs finales que j’ai essayées, mais elles ne fonctionnaient pas aussi bien. Je suis également en train d’essayer nginx pour être utilisé à la place d’Apache mais je ne peux pas trouver un moyen approprié d’exécuter le script cgi avec cette charge élevée sur le serveur en utilisant nginx.

Que puis-je faire pour résoudre ce problème?

Votre application est en train de mourir avant qu’Apache puisse le contacter avec succès. La réponse est de savoir pourquoi l’application est en train de mourir.

Le processus FastCGI ne devrait jamais mourir ou quitter, même dans une condition d’erreur. Apache s’attend à ce que le script FastCGI continue à être présent.

Vous mentionnez que vous avez un script cgi. Comment l’avez-vous modifié pour prendre en charge FastCGI?

Habituellement, vous devez passer à quelque chose comme CGI :: Fast, supprimer tous les appels à mourir et quitter, et refactoriser votre script pour qu’il s’exécute à l’aide de la boucle CGI :: Fast while.