2011-05-26 24 views
6

Actualmente estoy probando un servidor con un cliente de prueba automático que simula una gran cantidad de usuarios. Tanto el servidor como el cliente están escritos en Java. El cliente abre una conexión tcp/ip para cada usuario. Tanto el servidor como el cliente se ejecutan en Ubuntu Linux, el cliente se ejecuta en 11.04 y el servidor en 10.04.Problema al ejecutar java.net.bindexception no se puede asignar la dirección solicitada

Las pruebas fueron buenas hasta 27000 conexiones simultáneas abiertas, después de eso decidí saltar a 36000 (los recursos de servidores y clientes no eran realmente todo lo que se usó en 27000, así que decidí hacer un salto un poco más grande). cuando traté de ejecutar la prueba de 36k Me dio la siguiente excepción en el cliente:

  • java.net.BindException: No se puede asignar la dirección solicitada

Por lo que conozco en 36k todavía debería tener puertos libres ya que no mucho más se está ejecutando en ninguna máquina y tcp limita el número de puerto en 2^16 que es 65536. Ahora, dado que es Linux, también configuré la cantidad de archivos abiertos para el usuario a 100k con ulimit -n 100000. Pero todavía recibo la misma excepción.

Me pregunto qué otra cosa podría ser una posible causa para la excepción mencionada, o linux de alguna otra forma limita el número de conexiones salientes?

Gracias de antemano,

Danijel

Respuesta

5

Por defecto, Linux picks asignan dinámicamente puertos de la gama 32768..61000. Los otros están disponibles para asignación estática, si se vincula a un número de puerto específico. El rango se puede cambiar si desea que haya más puertos disponibles para la asignación dinámica, pero solo tenga cuidado de no incluir los puertos que se usan para los servicios específicos que necesita (por ejemplo, 6000 para X11). Además, no debe permitir que los puertos < 1024 se asignen dinámicamente ya que son privilegiados. Para verificar o cambiar el rango:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768 61000 

# echo "16384 65535" > /proc/sys/net/ipv4/ip_local_port_range 
+0

Gracias a mark4o por la explicación y la solución, estuvo en lo cierto. – Zapkhiel

Cuestiones relacionadas