Sto provando a caricare il test su un server Java aprendo un gran numero di connessioni socket al server, autenticando , chiudendo la connessione, quindi ripetendo. La mia app fa funzionare grande per un po 'ma alla fine ottengo:"java.net.BindException: Indirizzo già in uso" durante il tentativo di creazione rapida di Socket e distruzione per test di carico
java.net.BindException: Address already in use: connect
Secondo la documentazione che ho letto, la ragione di questo è che le prese chiuse occupano ancora l'indirizzo locale assegnato a loro per un periodo di tempo dopo la chiusura() è stato chiamato. Questo dipende dal sistema operativo ma può essere dell'ordine di minuti. Ho provato a chiamare setReuseAddress(true)
sul socket con la speranza che il suo indirizzo fosse riutilizzabile immediatamente dopo che è stato chiamato close()
. Purtroppo questo non sembra essere il caso.
Il mio codice per la creazione di socket è:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
Ma ancora ottengo questo errore:
java.net.BindException: Address already in use: connect after awhile.
C'è un altro modo per realizzare quello che sto cercando di fare? Vorrei ad esempio aprire 100 prese, chiuderle tutte, aprire 200 prese, chiuderle tutte, aprire 300, ecc. Fino a un massimo di 2000 socket.
Qualsiasi aiuto sarebbe molto apprezzato!
È il server o il client che genera l'eccezione? Accade dopo un numero consistente di connessioni? –
Probabilmente è necessario modificare le impostazioni TCP della macchina, vedere http://docs.alfresco.com/4.0/topic/com.alfresco.enterprise.doc/tasks/alf-win-regedit.html –