2 Stimmen

Seltsames Netzwerk-Socket-Leck in Java-Anwendung

Ich versuche, ein Netzwerk-Socket-Leck in unserem Java-Daemon zu finden, der eine ziemlich seltsame Ausgabe in lsof hat:

java    11734 root  463u  IPv6          225927527                TCP 192.168.254.1:http->192.168.254.1:46149 (CLOSE_WAIT)
java    11734 root  464u  IPv6          225927347                TCP 192.168.254.1:http->192.168.254.1:46102 (CLOSE_WAIT)
java    11734 root  465u  IPv6          225928791                TCP 192.168.254.1:http->192.168.254.1:46451 (CLOSE_WAIT)
java    11734 root  466u  IPv6          225927617                TCP 192.168.254.1:http->192.168.254.1:46170 (CLOSE_WAIT)
java    11734 root  467u  IPv6          225930330                TCP 192.168.254.1:http->192.168.254.1:57333 (CLOSE_WAIT) 

Und so weiter, bis alle verfügbaren Deskriptoren aufgebraucht sind und die Fehlermeldung "Zu viele Dateien" erscheint.

Haben Sie eine Idee, was dies verursachen kann?

Vielen Dank im Voraus!

5voto

user207421 Punkte 297318

CLOSE_WAIT bedeutet, dass die Verbindung von der Gegenstelle geschlossen wurde, der Socket aber darauf wartet, dass die lokale Anwendung ihn schließt. Das tun Sie also nicht.

Sie müssen sicherstellen, dass Sie EOS unter allen Umständen, unter denen es auftreten kann, ordnungsgemäß handhaben, d. h. den Socket schließen, und dito IOExceptions bei jeder Socket-Operation - Sie müssen auf 何れも von ihnen außer SocketTimeoutException durch Schließen der Buchse. Sie müssen auch sicherstellen, dass die Sockets geschlossen werden in finally Blöcke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X