Dites donc qu'il y a un processus de serveur qui prend trop de temps. Le client se plaint que cela «expire».Processus Apache abandonné, combien de temps cela va-t-il durer?
Corrigez-moi si je me trompe, mais ce délai particulier pourrait avoir à faire avec le paramètre de délai d'apache, mais pas nécessairement. Je crois que c'est le cas parce que lors du test de la page en question, nous ne pouvions pas l'obtenir de façon fiable - la plupart du temps le navigateur tournait aussi longtemps qu'il le fallait.
Le paramètre de délai d'attente prend effet en cas de problème de connexion avec le client, comme décrit dans the documentation. Mais si la connexion était bonne, ce serait au client de fermer la connexion (je crois). Je supposais que cela signifiait également que si le client fermait son navigateur, Apache atteindrait la limite de délai (dans mon cas, 300 secondes), et tuerait le processus. Cela ne semble pas être le cas.
Voilà comment je l'ai testé:
J'ai ajouté une boucle while à un code sur le serveur:
too_long = 2000
tstart = time.time()
f = open('/tmp/timeout_test.txt', 'w')
while True:
time.sleep(100)
elapsed = time.time() - tstart
f.write('Loop, %s elapsed\n' % elapsed)
if elapsed > too_long:
break
J'ouvre alors la page Web pour lancer cette boucle, et courut netstat sur le serveur:
~$ netstat -np | grep ESTAB | grep apache
tcp 0 0 10.102.123.6:443 10.102.119.101:53519 ESTABLISHED 16534/apache2
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
(qui est moi à 10.102.119.101, le serveur est à 10.102.123.6)
Je puis fermé mon navigateur et rediffusé cette ligne netstat:
~% netstat -np | grep ESTAB | grep apache
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
Ma connexion a disparu, mais le serveur était toujours dans la boucle, je pourrais confirmer en exécutant:
~% lsof | grep timeout
apache2 16534 www-data 14w REG 8,1 0 536533 /tmp/timeout_test.txt
qui signifie que le processus apache avait encore ce fichier ouvert. Pour les 2000 prochaines secondes, quand j'ai couru:
~% cat /tmp/timeout_test.txt
Je n'ai rien. Après 2000 secondes, la ligne netcat ne produisait rien du tout, et le fichier tmp était rempli avec la sortie de la boucle while.
Il semble donc que le processus Apache fait exactement ce qu'il a été demandé, quelle que soit la connexion du client? Et à quoi sert cette connexion de bouclage?
Quelle interface apache vers python utilisez-vous? mod_python? fcgi? CGI? –
J'utilise mod_wsgi – EMiller
* Processus Apache abandonné, combien de temps cela va-t-il durer? * Jusqu'à ce qu'il ait besoin de se reposer, de manger, de trouver de nouveaux parents ou de mourir. – voyager