2009-08-04 10 views
8

Salut J'ai un problème très laid avec: java.net.SocketException: Pas d'espace tampon disponible (maximum de connexions atteint?) Il est application client-serveur. Le client est Windows XP SP2 32b, avec deux net core duo de cartes. Java 1.6. u7. L'application a une prise de serveur de couple ouverte pour la communication locale et un couple de prise de client pour le serveur de rmi à jboss.Recherche java.net.SocketException: Aucun espace tampon disponible

Après quelques heures/jours! Je suis incapable d'ouvrir une nouvelle socket client pour communiquer avec le serveur. Les sockets serveur fonctionnent toujours.

Windows netstat montre quelque chose de 130 à 150 connexion. En essayant manuellement j'ai épuisé le tampon après ~ 3500 connexions!

J'ai essayé:

  • vérifier chaque socket que nous utilisons que nous fermons également.
  • course netstat à fond pour surveiller les connexions ouvert
  • scan de virus de l'exécution pour trouver tous les logiciels malveillants
  • mise à jour java 1,6 u16
  • désactiver seconde interface réseau

  • Une fois java est redémarré, je suis en mesure d'ouvrir nouvelle connexion.

    Exception entier:

     
    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) 
    

    --edited
    Nous avons frappé finalement le problème avec un dysfonctionnement serveur snmp. J'ai écrit mes notes dans le commentaire ci-dessous. Merci pour l'aide.

    +0

    Essayez http://support.microsoft.com/kb/2577795 –

    Répondre

    1

    Ce que nous avons essayé (et avec succès) de tuer le problème. JAVA - vérifier à nouveau chaque prise, nous avons utilisé, les enregistrer dans une classe spéciale si nécessaire
    - fournir SocketFactory et ServerSocketFactory pour chaque classe qui socket ouvert lui-même (par exemple jboss connecteurs)
    - vérifier les fichiers ouverts, fermez-en enfin
    - L'URL ouvre également la connexion, mais si vous demandez un flux après cela, la connexion est fermée avec le flux (merci Stephen).

    OS
    - utiliser différents java (1.5, 1.6, 1.7)
    - installer de nouveaux pilotes
    - utilisation netstat et surveiller le trafic sur fond (à l'aide de scripts, oui win xp peut faire les scripts assez bien). Utilisez des renifleurs de paquets avancés (requin de fil?) Si nécessaire.
    - win xp ont limite de connexions simultanées, les vérifier (google) trop
    - (! Même réseau privé) vérifier encore et encore pour le virus et mallware

    3

    Il semble certainement que vous fuyez Sockets en quelque sorte dans votre application.

    • Vérifiez que votre code se ferme toujours les sockets, il ouvre ... même en cas d'une exception; c'est-à-dire que le se ferme dans un bloc finally.
    • Si votre code utilise des connexions URL, assurez-vous qu'ils sont déconnectés.
    • Je ne suis pas un expert, mais votre code devrait-il fermer son objet InitialContext?
    +0

    - bon point avec des connexions d'URL, je les revérifier
    - Je lis déjà doc pour le contexte initial et la fermeture de l'air à peu hors de propos. Mais je vais essayer.
    Mais encore pourquoi je ne vois aucune connexion utilisant netstat? – pnemec

    +0

    @pnemec: Sur la base du message d'exception, il peut s'agir de ressources de tampon côté Java associées à des Sockets en cours de perte. Cela peut ne pas apparaître avec Windows netstat. –

    0

    Après avoir lu les conseils offerts dans ce link! J'ai été capable de déterminer que j'utilisais isDisplayed() trop souvent en trop peu de temps. Par conséquent, j'ai placé une attente de 5 millisecondes entre les appels à isDisplayed. Cela a corrigé mon problème d'exception Socket. Comme indiqué dans le lien, vous devez insérer un essai try juste au cas où cette attente n'est pas assez longue.