Newsgroup: it.comp.os.linux.sys
Titolo: tcp CLOSE_WAIT ??

RedHat 7.2, kernel 2.4.9, apache 1.3.22 e php 4.11 Su questo server gira un
sito postnuke powered (un content management alla phpnuke) da circa un mese
senza alcun problema, fino a quando circa 3 giorni fa i progammatori che ci
stanno lavorando hanno inserito all'interno del sito alcuni link (semplici
<a href>) a immagini presenti su un altro server web che sta nella stessa
classe, server web con NT4 e IIS4. Dove sta il problema? ecco cosa mi
restituisce netstat -n dato sul server linux:
tcp        0      0 X.X.X.10:34401     X.X.X.11:80        CLOSE_WAIT
...ma non una riga, una infinità di righe (almeno 500 dopo l'ultimo riavvio
avvenuto 5 ore fa). Praticamente il server Linux non riesce a chiudere le
richieste al server IIS. Un man netstat mi da questo:
CLOSE_WAIT: The remote end  has  shut  down,  waiting  for  the socket to
close.
che però non mi aiuta molto.
Più passa il tempo e maggiore è il numero di connessioni "non chiuse" che
vedo, considerate che il sito non è ancora accessibile al grande pubblico ma
lo usano solo gli sviluppatori, non oso immaginare cosa accadrà quando verrà
aperto a tutti, probabilmente ci saranno grossi problemi di raggiungibilità,
prima o poi il numero di socket verrà esaurito immagino, per non parlare poi
delle prestazioni, già ora mi accorgo che è più lento...L'unico modo per
azzerare le connessioni è riavviare, restartare apache o la scheda di rete
non serve. sul server NT4 invece un netstat mi dice che vi sono al
massimo5-6 connessioni ancora aperte dal server linux, come se per lui le
"vecchie" connessioni fossero già chiuse mentre il server linux aspetta
ancora qualche cosa. Purtroppo non so come funziona esattamente il
protocollo tcp e la gestione dei socket, e non so nemmeno se può dipendere
da qualche impostazione di apache, qualche idea?

 writes:
T> stanno lavorando hanno inserito all'interno del sito alcuni link (semplici
T> <a href>) a immagini presenti su un altro server web che sta nella stessa
E visionano i documenti HTML dalla macchina Linux ? Io direi di si...
T> classe, server web con NT4 e IIS4. Dove sta il problema? ecco cosa mi
Occhio che e` rete la parola da usare, non classe. Classe e` un insieme
di indirizzi di reti...
T> restituisce netstat -n dato sul server linux:
T> tcp        0      0 X.X.X.10:34401     X.X.X.11:80        CLOSE_WAIT
T> ...ma non una riga, una infinità di righe (almeno 500 dopo l'ultimo riavvio
T> avvenuto 5 ore fa). Praticamente il server Linux non riesce a chiudere le
T> richieste al server IIS. Un man netstat mi da questo:
T> CLOSE_WAIT: The remote end  has  shut  down,  waiting  for  the socket to
T> close.
Non e` che e` Windows a dimenticarsi di mandar qualcosa  per chiudere
la connessione ? Mi auguro che non sia XP...
Comunque, se  sono link <a href>  o <img src> la  cosa dovrebbe andare
cosi`
        [Ye Good]                       [ Stinky ]
        [ Linux ]                       [ Nasty  ]
        [  Box  ]                       [ Winsoz ]
            |                               |
            |                               |
            | Il documento                  | Immagine via
            | originale                     | link
             \                             /
              \___________________________/
                           |
                           |
                       [ Client ]
-- 
Gian  | main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Uberto|                        David Korn, 1987 ioccc best one liner 
Lauri |-------------------------------------------------------------------
(aka saint) >>Vedere X-Nospam nell'header - See X-Nospam field in Header<<

 <a href>) a immagini presenti su un altro server web che sta nella stessa
Ma è il server linux che parla con quelli windows o il client che si
connette? In altre parole, apache+php prendono l'immagine dai server e la
rigirano al client oppure il client accede loro direttamente?


La prima che hai detto. Se apache deve aprire una pagina html che contiene
al suo interno un riferimento ad una immagine "servita" da un altro server
web (in questo caso il pc con nt4) č il server linux che apre la connessione
verso la porta 80 del server nt, come si vede dall'output di netstat. Poi il
server linux offre l'immagine al browser del visitatore. Non vengono chiuse
le connessioni che il server linux apre verso il server nt quando deve
"scaricare" le immagini. So che non č il massimo avere una "roba" che
funziona cosě ma non č una mia scelta...

                        [ Client ]
mmm, adesso che mi ci fai pensare dovrebbe essere proprio così: non dovrebbe
essere apache ad andare a pigliare le immagini sul server nt, ma il browser
del client..ma a questo punto mi chiedo come mai la macchina linux apra
delle connessioni verso il server web presente su nt4...

> 
#>> E visionano i documenti HTML dalla macchina Linux ? Io direi di si...
#
#T> Si
T> mmm, adesso che mi ci fai pensare dovrebbe essere proprio cosě: non dovrebbe
T> essere apache ad andare a pigliare le immagini sul server nt, ma il browser
T> del client..ma a questo punto mi chiedo come mai la macchina linux apra
T> delle connessioni verso il server web presente su nt4...
La macchina Linux ospita il browser che (stando alla parte evidenziata
con #)  richiede al  server HTTP della  macchina Windows  (continuo ad
augurarmi che NON sia XP) di fornire le immagini.
A questo punto  pare proprio che qualcosa vada  perso nello scambio di
messaggi tra le due macchine (ma la connessione e` aperta dal browser,
non da apache) per la chiusura delle connesioni. E a naso direi che e`
una classica netfesseria di M$...


 ip .10 (NT4).
Aggiungo una piccola nota tecnica riguardo il CLOSE WAIT:
Il problema non riguarda un server o client web ma l'entita' TCP.
l'http usa come protocollo il tcp e quindi per fare ad esempio la richiesta
di una pagina/immagine/altro viene aperta una connessione.
il CLOSE WAIT in questione sta a significare che l'altro capo (nel tuo caso
la macchina NT) ha cominciato a chiudere la connessione.
In pratica la macchina NT ha finito di spedire/ricevere dati, spedisce
alla macchina linux un pacchetto FIN. Questa rispedisce indietro un
pacchetto FIN ACK...ora, perche' la chiusura della connessione vada a buon
fine la macchina NT dovrebbe spedire il terzo e ultimo pacchetto alla macchina
Linux (un ack ulteriore) che a quanto pare viene perso...
Anche se questo avvenisse comunque le connessioni dovrebbero chiudersi 
su entrambi i lati (nel tuo caso NT ha gia' chiuso le conn Linux no) dopo
un tempo di timeout che in genere corrisponde al tempo di vita medio di un 
pacchetto...in pratica dipende dallo stack TCP...
in definitiva se il problema non va via prova a sniffare e vedere che dati
passano sulla socket aperta dal lato linux...
Per controllare che effettivamente il problema e' l'NT prova a scambiarla
poer un po' con un'altra macchina...
-- 
regards,
Ciro.
--
    Writing from the computer science department of Milan (DSI)
       home page at 
http://www.silab.dsi.unimi.it/~cs556770/
 
--