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>
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)
3 Réponses :
Cela sonne certainement comme si vous fuiez des prises en quelque sorte dans votre application. P>
enfin code> bloc. li>
- Si votre code utilise des connexions URL,
assurez-vous qu'ils sont déconnectés. li>
- Je ne suis pas un expert, mais votre code doit-il fermer son objet initialContext? LI>
ul>
- Bon point avec les connexions d'URL, je les revérifierai
@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.
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é!) P>
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 } }
Essayez support.microsoft.com/kb/2577795