J'ai un composant tiers qui essaie d'envoyer trop de messages UDP à trop d'adresses distinctes dans une certaine situation. C'est une rafale qui survient lorsque le logiciel est démarré et que la situation est temporaire. Je ne suis pas sûr que ce soit le montant des messages ou le fait que chacun d'entre eux aille à une adresse IP distincte.Java IOException: aucun espace tampon disponible lors de l'envoi de paquets UDP sous Linux
Quoi qu'il en soit, la modification du protocole sous-jacent ou le composant problématique n'est pas une option, donc je suis à la recherche d'une solution de contournement. Le StackTrace ressemble à ceci:
java.io.IOException: No buffer space available
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
Ce problème se produit (au moins) avec les versions Java 1.6.0_13 et 1.6.0_10 et versions Linux Ubuntu 9.04 et RHEL 4.6. Y a-t-il des propriétés système Java ou des réglages de configuration Linux qui pourraient vous aider?
Merci. En plus de ces paramètres, j'ai essayé de modifier net.ipv4.udp_mem et net.ipv4.udp_wmem_min. D'abord j'ai doublé, les valeurs, puis je les ai doublées encore, et finalement je les ai changées pour qu'elles soient 10 fois plus grosses que les valeurs par défaut. Rien n'a aidé jusqu'à présent. – auramo
@auramo, Quelle JVM utilisez-vous? Le soleil construit ou les trucs OpenJDK/JVM de votre distribution? Je recommanderais d'en utiliser un pour votre distribution, le plus ouvert si possible car il sera moins sûr et plus précis avec le noyau/libc. –
J'utilise les versions Sun de 1.6.0_13 et 1.6.0_10. Je pourrais facilement essayer avec les versions d'OpenJDK, mais en changeant de l'implémentation de Sun, l'OpenJDK pour le produit final serait un problème majeur à ce stade du projet. – auramo