Estoy intentando cargar la prueba de un servidor Java abriendo una gran cantidad de conexiones de socket al servidor, autenticando , cerrando la conexión, luego repitiendo. Mi aplicación se ejecuta muy bien por un tiempo, pero finalmente me sale:"java.net.BindException: dirección ya en uso" al intentar hacer una creación y destrucción rápida de socket para pruebas de carga
java.net.BindException: Address already in use: connect
De acuerdo con la documentación que he leído, la razón de esto es que las tomas cerradas siguen ocupando la dirección local asignada a ellos por un período de tiempo después del cierre() era llamado. Esto depende del sistema operativo, pero puede ser del orden de minutos. Intenté llamar al setReuseAddress(true)
en el socket con la esperanza de que su dirección sería reutilizable inmediatamente después de llamar al close()
. Lamentablemente, este no parece ser el caso.
Mi código para la creación de socket es:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
Pero sigo teniendo este error:
java.net.BindException: Address already in use: connect after awhile.
¿Hay alguna otra manera de lograr lo que estoy tratando de hacer? Me gustaría, por ejemplo, abrir 100 tomas, cerrarlas todas, abrir 200 tomas, cerrarlas todas, abrir 300, etc. hasta un máximo de 2000 tomas.
¡Cualquier ayuda sería muy apreciada!
¿Es el servidor o el cliente el que lanza la excepción? ¿Sucede después de una cantidad constante de conexiones? –
Probablemente necesite cambiar la configuración TCP de la máquina, consulte http://docs.alfresco.com/4.0/topic/com.alfresco.enterprise.doc/tasks/alf-win-regedit.html –