Questione : Apache - problema di collegamento di TCP del Tomcat - CLOSE_WAIT/FIN_WAIT_2

Ciao, il
We sta facendo funzionare Apache 6.0.20 sulla piattaforma di Solaris 10. Sto ottenendo un errore se faccio funzionare il caso del tomcat per da molto tempo. Ho notato che questo problema va via se ricomincio Apache. Il problema è condizioni CLOSE_WAIT e FIN_WAIT_2 del TCP/IP che sono generate ogni volta l'utente si collega ed annota fuori. Se questo continua allora ad accadere più utente potrebbe collegarsi; Devo rimbalzare Apache using l'arresto di apache2/bin/apachectl/inizio (risolverà i problemi del TCP/IP). Apprezzo se poteste aiutarli a risolvere questo issue.

admin@webserver: netstat - | grep 9034
*.9034 *.* 0 0 49152 0 LISTEN
127.0.0.1 .64130 127.0.0.1 .9034 49152 0 49152 0 CLOSE_WAIT
127.0.0.1 .9034 127.0.0.1 .64130 49152 0 49152 0 FIN_WAIT_2
127.0.0.1 .64131 127.0.0.1 .9034 49152 0 49152 0 CLOSE_WAIT
127.0.0.1 .9034 127.0.0.1 .64131 49152 0 49152 0 FIN_WAIT_2
127.0.0.1 .64132 127.0.0.1 .9034 49152 0 49152 0 CLOSE_WAIT
127.0.0.1 .9034 127.0.0.1 .64132 49152 0 49152 0 FIN_WAIT_2
admin@webserver: netstat - | grep 9044
*.9044 *.* 0 0 49152 0 LISTEN
127.0.0.1 .64127 127.0.0.1 .9044 49439 0 49152 0 CLOSE_WAIT
127.0.0.1 .9044 127.0.0.1 .64127 49152 0 49439 0 FIN_WAIT_2
127.0.0.1 .64128 127.0.0.1 .9044 49152 0 49152 0 CLOSE_WAIT
127.0.0.1 .9044 127.0.0.1 .64128 49152 0 49152 0 FIN_WAIT_2
127.0.0.1 .64129 127.0.0.1 .9044 49152 0 49152 0 CLOSE_WAIT
127.0.0.1 .9044 127.0.0.1 .64129 49152 0 49152 0 FIN_WAIT_2
class= del

Risposta : Apache - problema di collegamento di TCP del Tomcat - CLOSE_WAIT/FIN_WAIT_2

I collegamenti in CLOSE_WAIT sono generalmente un problema di applicazione. Ho veduto molte applicazioni del middleware che hanno interagito con gli applicazione Web causare CLOSE_WAIT. Notare che i collegamenti FIN_WAIT_2 sono appena l'altro lato di un collegamento che è in CLOSE_WAIT.

CLOSE_WAIT è causato quando un lato del collegamento ha chiuso relativa estremità del collegamento di TCP, ma l'altro scopo è ancora aperto. Sui sistemi basati su UNIX, lo zoccolo non è chiuso fino a che l'ultimo processo che lo fa aprirsi non lo chiuda. Quello significa che il uno o il altro l'applicazione che lo possiede non sta leggendo lo zoccolo (e non sa così che l'altro estremità chiusa esso) o appena non è closing esso, o ci è un altro processo con quello stesso zoccolo aperto.

Ecco perchè vediamo questo problema con middleware. Tende ad essere molti collegamenti ricevuti continuamente ed i filetti differenti accettano i collegamenti ed allora si biforcano fuori da un nuovo processo per trattarli. Se fra l'accettazione e la forcella, un altro collegamento è accettato, quando la forcella accade il secondo processo ora ha entrambi gli zoccoli aperti, ma soltanto conosce circa uno. Quello significa che il primo processo non può chiudere il relativo zoccolo fino a che il secondo processo non esca. Se il secondo processo è vivo molto lungo, allora il collegamento attacca in CLOSE_WAIT.

Inoltre ho veduto un caso dove ci era un termine di corsa nell'assistente in se e gli zoccoli si sono accumulati là.

A volte il middleware o i server applicativi prevede che l'applicazione sia supposta per chiudere tutti gli zoccoli inutilizzati. A volte è appena un insetto ad uno dei tre livelli.

Che cosa dovreste fare è di identificare quale processo ha lo zoccolo aperto. Potete usare i pfiles denominate (/proc cd; pfiles *) trovare i processi ha coinvolto. Allora provare a calcolare fuori se è un processo che ha avuto legittimamente lo zoccolo e non è closing esso, o se è un processo che non dovrebbe averlo affatto. Ciò gli darà un'idea che cosa sta accendendo.
Altre soluzioni  
 
programming4us programming4us