L'esecuzione di lsof -i mostra molte connessioni in CLOSE_WAIT? Dovrei preoccuparmi


7

Quindi sto correndo lsof -i | wc -lperiodicamente e mi sta dicendo che su 420 linee, tra 240 e 255 sono in CLOSE_WAITstato. In che modo le connessioni TCP entrano in questo stato?

Dovrei essere preoccupato e come devo risolverlo?

Risposte:


12

(Stavo per modificare la risposta di mikegrb, ma ho deciso di massacrarla un po 'troppo)

CLOSE_WAIT significa praticamente esattamente ciò che dice: il kernel sta aspettando che il processo locale chiuda il suo descrittore di file prima di rimuovere la voce. La connessione TCP è stata completamente demolita e l'estremità remota potrebbe avere l'impressione che la connessione sia terminata, ma la tua estremità sta trattenendo le cose.

L'unica preoccupazione è che molte voci CLOSE_WAIT consumano la memoria del kernel e le voci della tabella dei descrittori di file, il che può essere un problema se ne esistono grandi pile. Se le voci che stai guardando sono transitorie, probabilmente è solo che stai scorrendo moltodelle connessioni TCP e ne vedrai una piccola parte nel breve lasso di tempo tra quando la connessione viene chiusa e il processo procede alla chiusura del descrittore di file. D'altra parte, se sono permanenti (le porte e gli indirizzi IP non cambiano nel tempo), qualcosa perde i descrittori e deve essere riparato in modo che chiuda sempre i suoi fd quando ha finito con loro. Come ha detto mikegrb, una versione più recente potrebbe aver già risolto il problema, quindi una domanda sulla relativa mailing list o esame dei log delle modifiche è probabilmente giustificata.


Le connessioni TCP in CLOSE_WAIT utilizzano descrittori di file? Perché ieri ho ricevuto un'eccezione Socket "Troppi file aperti" problema.
user20414,

2
Sì, le voci CLOSE_WAIT sono descrittori di file aperti.
womble

2

Lo stato CLOSE_WAIT indica che l'altra estremità ha inviato un segmento FIN per chiudere la connessione. La connessione è ancora stabilita. È in una modalità che si potrebbe pensare come half duplex, consentendo a questa estremità di svuotare tutti i buffer, inviando gli ultimi bit di dati alla fine richiedendo la chiusura della connessione prima di chiudere la connessione da questa estremità.

Se ci sono molte connessioni che rimangono in CLOSE_WAIT significa che il processo responsabile non sta chiudendo il socket una volta che entra in CLOSE_WAIT. È possibile utilizzare tcpdump o altri strumenti di acquisizione del traffico di rete per esaminare i pacchetti.

Dai anche un'occhiata al processo responsabile. Per curiosità qual è il processo responsabile? Potrebbe avere una versione fissa più recente disponibile o forse è il momento di presentare una segnalazione di bug;)


Apache Tomcat 5.5.27
user20414

0

se operi in una rete debole puoi sintonizzare:

  • Numero massimo di descrittori di file via ulimitse via /proc(a livello di sistema)
  • È possibile ridurre il tempo di attesa TCP tramite /proc

0

Probabilmente non stai chiudendo una risorsa (handle di file, connessione di rete) da qualche parte in un'applicazione in esecuzione sul server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.