Domanda

Quindi, consente di dire che c'è un processo server che richiede troppo tempo. Il cliente lamenta che "tempi fuori".

Correggetemi se sbaglio, ma questo particolare timeout potrebbe avere a che fare con impostazione di timeout di apache, ma non necessariamente. Credo che questo sia il caso, perché quando si verifica la pagina in questione non siamo riusciti a farlo timeout in modo affidabile -. Per lo più il browser sarebbe solo girare per tutto il tempo ci sono voluti

L'impostazione di timeout entrerebbe in vigore se ci fossero problemi con la connessione al client, come descritto in la documentazione . Ma se la connessione andava bene, sarebbe fino al cliente di chiudere la connessione (credo).

ho assunto questo significava anche che, se il cliente ha chiuso il proprio browser, Apache avrebbe colpito il limite di timeout (nel mio caso, 300 secondi), e uccidere il processo. Questo non sembra essere il caso.

Ecco come ho provato:
Ho aggiunto un ciclo while per un certo codice sul server:

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

Ho quindi aprire la pagina Web per lanciare quel ciclo, e corsi netstat sul server:

~$ 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

(che sono io a 10.102.119.101, il server è in 10.102.123.6)
Poi ho chiuso il mio browser e reran quella linea netstat:

~% netstat -np | grep ESTAB | grep apache
tcp        0      0 127.0.0.1:60299         127.0.0.1:5432          ESTABLISHED 16534/apache2

La mia connessione è scomparso, ma il server era ancora in loop, ho potuto verificare eseguendo:

~% lsof | grep timeout
apache2   16534   www-data   14w      REG        8,1        0     536533 /tmp/timeout_test.txt 

che significa il processo apache aveva ancora quel file aperto. Per i successivi 2000 secondi, quando mi sono imbattuto:

~% cat /tmp/timeout_test.txt

Non ho niente. Dopo 2000 secondi la linea netcat ha prodotto nulla, e il file tmp è stato riempito con l'uscita dal ciclo while.

Così sembra che processo Apache fa proprio quello che è stato chiesto di fare, indipendentemente dalla connessione del client? E che cosa è che la connessione di loopback circa?

È stato utile?

Soluzione

Una corretta. In un modulo di Apache C è possibile aggiungere un controllo del tipo:

/* r is the 'request_rec' object from apache */
if (r->connection->aborted) {
    /* stop processing and return */
}

per verificare che il client è ancora connesso. Probabilmente l'interfaccia Python ha qualcosa di simile.

Per quanto riguarda il collegamento di loopback, è una connessione ad un database PostgreSQL tenuto aperto per tutto il tempo quel ciclo è in esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top