J'ai une application web écrite en utilisant CherryPy, qui est exécuté localement sur 127.0.0.1:4321
. Nous utilisons mod-rewrite et mod-proxy pour qu'Apache agisse comme un proxy inverse; Apache gère également notre cryptage SSL et peut éventuellement être utilisé pour transférer tout notre contenu statique.Les douilles Apache ne se ferment pas?
Tout cela fonctionne très bien pour les petites charges de travail. Cependant, j'ai récemment utilisé urllib2
pour écrire un script de test de stress qui simulerait une charge de travail de 100 clients. Après un certain temps, chaque client reçoit une erreur 503 d'Apache, indiquant qu'Apache ne peut pas se connecter à 127.0.0.1:4321
. CherryPy fonctionne correctement, mais mon journal des erreurs Apache révèle des lignes comme les suivantes:
[Thu Oct 02 12:55:44 2008] [error] (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. : proxy: HTTP: attempt to connect to 127.0.0.1:4321 (*) failed
recherche sur Google pour cette erreur révèle que Apache a probablement courir de descripteurs de fichier socket. Comme j'ai seulement 100 clients en cours d'exécution, cela signifie que les connexions ne sont pas fermées, soit entre ma connexion urllib2
et Apache (j'appelle certainement .close()
sur la valeur de retour de urlopen
), ou entre Apache et CherryPy.
J'ai confirmé que ma demande urllib2
envoie un en-tête HTTP Connection: close
, bien que Apache soit configuré avec KeepAlive On
si cela est important.
Dans le cas où il importe, j'utilise Python 2.5, Apache 2.2, CherryPy 3.0.3, et le serveur est en cours d'exécution sur Windows Server 2003.
Alors, quelle est ma prochaine étape pour arrêter ce problème?
Cela a résolu le problème instantanément. Merci beaucoup! –