8
votes

Hunt Down Java.net.SocketException: Pas de tampon disponible

Bonjour, j'ai un problème très laid avec: java.net.socketException: pas d'espace tampon disponible (des connexions maximales atteintes?) C'est une application client-serveur. Le client est Windows XP SP2 32B, avec deux cartes Net Net Core Duo. Java 1.6. U7. Application Demandez à Couple Server Prise ouverte pour la communication locale et une prise de courant client pour RMI vers JBoss Server.

Après quelques heures / jours! Je ne parviens pas à ouvrir une nouvelle prise client pour la communication au serveur. Les prises de serveur fonctionnent toujours. P>

Windows NetStat affiche quelque chose de 130 à 150. En essayant manuellement, j'ai épuisé tampon après ~ 3500 connexions! P>

J'ai essayé: p>

  • Vérifiez chaque socket que nous utilisons que nous le fermons également. Li>
  • Exécutez NetStat à l'arrière-plan pour surveiller les connexions ouvertes li>
  • Exécuter le scan des virus pour trouver tous les logiciels malveillants li >
  • Mettre à jour Java à 1.6 U16 LI>
  • Désactiver la deuxième interface réseau Li>

    Une fois que Java est redémarré, je suis capable d'ouvrir une nouvelle connexion. p>

    Exception entière: P>

    cause:javax.naming.CommunicationException: Failed to connect to server IP:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server IP:1099 [Roo
    t exception is java.net.SocketException: No buffer space available (maximum connections reached?): JVM_Bind]]
    2009-08-03 09:13:18,968 DEBUG [Thread-9] - stack trace:
    2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)
    2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
    2009-08-03 09:13:18,968 DEBUG [Thread-9] - org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
    2009-08-03 09:13:18,968 DEBUG [Thread-9] - javax.naming.InitialContext.lookup(Unknown Source)
    

  • 1 commentaires

    3 Réponses :


    3
    votes

    Cela sonne certainement comme si vous fuiez des prises en quelque sorte dans votre application.

    • Vérifiez que votre code se ferme toujours les sockets qu'il ouvre ... même dans le événement d'exception; c'est-à-dire le Fermer dans un enfin bloc.
    • Si votre code utilise des connexions URL, assurez-vous qu'ils sont déconnectés.
    • Je ne suis pas un expert, mais votre code doit-il fermer son objet initialContext?

    2 commentaires

    - Bon point avec les connexions d'URL, je les revérifierai Mais pourquoi je suis Nost voir une connexion à l'aide de NetStat?


    @PNEMEC: basée sur le message d'exception, il pourrait s'agir de ressources tampons latérales Java associées aux prises perdues perdues. Cela peut ne pas apparaître avec Windows NetStat.



    1
    votes

    Qu'est-ce que nous avons essayé (et avec succès) tue le problème. JAVA - Vérifiez à nouveau chaque prise que nous avons utilisée, enregistrez-les dans une classe spéciale si nécessaire
    - Fournissez à SocketFactory et ServersocketFactory pour chaque classe qui ouvre une prise ouverte elle-même (par exemple, connecteurs JBoss)
    - Vérifiez les fichiers ouverts, fermez-les enfin
    - L'URL ouvre également la connexion, mais si vous demandez du flux après cela, la connexion est fermée avec le flux (merci Stephen).
    de
    OS
    - Utilisez différents Java (1.5, 1.6, 1.7)
    - Installez de nouveaux pilotes
    - Utilisez le trafic NetStat et surveiller sur fond (à l'aide de scripts, oui Win XP peut faire les scripts assez bien). Utilisez des renifleurs de paquets avancés (requins filaires?) Si nécessaire.
    - Win XP a une limite pour les connexions simultanées, vérifiez-les (Google) de manière aussi - Vérifiez encore et encore pour Virus et Mallware (même sur le réseau privé!)


    0 commentaires

    0
    votes

    Après avoir lu l'avis offert dans ce Lien ! J'ai été capable de déterminer que j'utilisais une manière isdisplayed () trop souvent trop souvent à une époque. Par conséquent, j'ai placé une attente de 5 millisecondes entre les appels vers isdisplayed. Ceci corrigé le problème d'exception de mon socket.

        for (final WebElement person: persons){
            if (person.isDisplayed()){
                dosomething;
                sleep 5 milliseconds
            }
        }
    


    0 commentaires