Tengo un componente de terceros que intenta enviar demasiados mensajes UDP a demasiadas direcciones separadas en una situación determinada. Esto es una explosión que ocurre cuando el software se inicia y la situación es temporal. De hecho, no estoy seguro de si es la cantidad total de los mensajes o el hecho de que cada uno de ellos vaya a una dirección IP diferente.Java IOException: no hay espacio en el búfer disponible al enviar paquetes UDP en Linux
De todos modos, cambiar el protocolo subyacente o el componente problemático no es una opción, entonces estoy buscando una solución alternativa. El StackTrace se ve así:
java.io.IOException: No buffer space available
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
Este problema se produce (al menos) con las versiones de Java 1.6.0_13 y 1.6.0_10 y versiones de Linux Ubuntu 9.04 y RHEL 4.6.
¿Hay alguna propiedad del sistema Java o ajustes de configuración de Linux que puedan ser útiles?
Gracias. Además de esos parámetros, traté también de ajustar net.ipv4.udp_mem y net.ipv4.udp_wmem_min. Primero doblé, los valores, luego los doblé de nuevo, y finalmente los cambié para que fueran 10 veces más grandes que los valores predeterminados. Nada ha ayudado hasta ahora sin embargo. – auramo
@auramo, ¿Qué JVM estás usando? ¿La compilación del sol o las cosas de OpenJDK/JVM de tu distribución? Yo recomendaría usar uno para su distribución, el abierto, de ser posible, ya que será menos "seguro" y tendrá una interfaz más precisa con el kernel/libc. –
Estoy usando las versiones Sun de 1.6.0_13 y 1.6.0_10. Podría probar fácilmente con las versiones de OpenJDK, pero cambiar de la implementación de Sun a OpenJDK para el producto final sería una gran molestia en este punto del proyecto. – auramo