Hi Ich habe ein sehr hässliches Problem mit: java.net.SocketException: Kein Pufferspeicher verfügbar (maximale Verbindungen erreicht?) Es ist Client-Server-App. Client ist Windows XP SP2 32b, mit zwei Netzkarten Kernduo. Java 1.6. u7. Anwendung haben paar Server-Socket offen für lokale Kommunikation und ein paar Client-Socket für rmi zu jboss Server.
Nach ein paar Stunden / Tagen! Ich kann keinen neuen Client-Socket für die Kommunikation mit dem Server öffnen. Server-Sockets funktionieren weiterhin.
Windows netstat zeigt etwas von 130 bis 150 Verbindung. Beim manuellen Versuch erschöpft Puffer nach ~ 3500 Verbindungen!
Ich habe es versucht:
Ganze Ausnahme:
%Vor% - editiert
Wir haben endlich das Problem mit einem fehlerhaften snmp Server. Ich schrieb meine Notizen im Kommentar unten. Danke für die Hilfe.
Was wir (und erfolgreich) versucht haben, das Problem zu beseitigen.
JAVA
- prüfe nochmal jede benutzte Buchse, registriere sie bei Bedarf in einer speziellen Klasse
- Stellen Sie SocketFactory und ServerSocketFactory für jede Klasse zur Verfügung, die den Socket selbst öffnet (zum Beispiel jboss Connectors)
- überprüfen Sie geöffnete Dateien, schließen Sie sie schließlich
- Die URL öffnet auch die Verbindung, aber wenn Sie danach einen Stream anfordern, wird die Verbindung zusammen mit dem Stream geschlossen (danke Stephen).
OS
- Verwenden Sie verschiedene Java (1.5, 1.6, 1.7)
- Installiere neue Treiber
- Verwenden Sie Netstat und überwachen Sie den Datenverkehr im Hintergrund (mit Skripten, ja Win XP kann die Skripte ziemlich schön tun). Verwenden Sie bei Bedarf erweiterte Paket-Sniffer (Drahthai?).
- Win XP haben Limit für gleichzeitige Verbindungen, überprüfen Sie sie (Google) auch
- Immer wieder nach Viren und mallware suchen (auch im privaten Netzwerk!)
Es klingt sicherlich so, als würden Sie irgendwie Sockets in Ihrer App verlieren.
finally
-Block. Nachdem Sie den Ratschlag in diesem Link gelesen haben ! Ich konnte feststellen, dass ich isDisplayed () viel zu oft in zu kurzer Zeit verwendete. Daher habe ich eine Wartezeit von 5 Millisekunden zwischen den Anrufen an isDisplayed gestellt. Dies hat mein Socket Exception-Problem behoben.
%Vor%Wie im Link angegeben, sollten Sie einen try catch einfügen, falls diese Wartezeit nicht lang genug ist.
Tags und Links java sockets networking windows-xp winsockets