Suche java.net.SocketException: Kein Pufferspeicher verfügbar

8

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:

  • überprüfe jeden Sockel, den wir benutzen, dass wir ihn auch schließen.
  • rufe netstat im Hintergrund auf, um geöffnete Verbindungen zu überwachen
  • Führen Sie einen Virenscan durch, um Malware zu finden
  • Aktualisieren Sie Java auf 1.6 u16
  • deaktivieren Sie die zweite Netzwerkschnittstelle

  • Sobald Java neu gestartet ist, kann ich eine neue Verbindung öffnen.

    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.

        
    pnemec 04.08.2009, 07:42
    quelle

    3 Antworten

    1

    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!)

        
    pnemec 25.08.2009, 12:00
    quelle
    3

    Es klingt sicherlich so, als würden Sie irgendwie Sockets in Ihrer App verlieren.

    • Überprüfen Sie, ob Ihr Code immer geschlossen wird die Steckdosen öffnet es ... sogar in der Ereignis einer Ausnahme; also tue das Schließen Sie in einem finally -Block.
    • Wenn Ihr Code URL-Verbindungen verwendet, vergewissere dich, dass sie getrennt werden.
    • Ich bin kein Experte, aber sollte Ihr Code sein InitialContext-Objekt schließen?
    Stephen C 04.08.2009 12:16
    quelle
    0

    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.

        
    Mike 25.02.2014 21:19
    quelle