Java.io.IOException ao tentar abrir 15000 sockets

4 respostas
andrewsa

Olá pessoal,

Estou com o seguinte problema,

Tenho uma aplicação Servidor em uma máquina ( Windows Server 2008 ) que usa um ServerSocketChannel na porta digamos 9999.

Tenho mais 6 máquinas que tem uma aplicação cliente que cada uma abre 2500 sockets (usando SocketChannel) nesta máquina servidor.

Em determinado momento as máquinas clientes começam a dar o seguinte erro:

java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at org.app.core.SocketPool$1.run(SocketPool.java:72)
	at java.lang.Thread.run(Unknown Source)

enquanto que na aplicação servidor

java.io.IOException: Foi forçado o cancelamento de uma conexão existente pelo host remoto
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:100)
    at sun.nio.ch.IOUtil.write(IOUtil.java:71)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334)
    at br.com.server.listener.shared.SharedMessageHandler.writeMessage(SharedMessageHandler.java:307)
    at br.com.server.listener.message.MessageProcessor.sendToModule(MessageProcessor.java:558)
    at br.com.server.listener.message.MessageProcessor.process(MessageProcessor.java:361)
    at br.com.server.listener.message.MessageProcessor.processa(MessageProcessor.java:164)
    at br.com.server.listener.message.MessageProcessor.linhas(MessageProcessor.java:92)
    at br.com.server.listener.message.MessageProcessor.processBuffer(MessageProcessor.java:69)
    at br.com.server.listener.shared.SharedMessageHandler.run(SharedMessageHandler.java:77)
    at br.com.server.listener.shared.SharedMessageServer.run(SharedMessageServer.java:29)

alguém tem alguma dica do que pode ser ?

4 Respostas

V

Alguém?? Também estou com essa mesma dúvida.

andrewsa
você conseguiu resolver??

V

Alguém?? Também estou com a mesma dúvida…

andrewsa
, você conseguiu descobrir o que era??

soaresinfo

Se você estiver tentando abrir todas as conexões ao mesmo tempo, você estará enchendo o servidor de requisições e pode dar negação de serviço. Ainda mais se não for um servidor parrudo. Quando fizer isso, monitore o processamento e consumo de memória para ver se tem gargalo.

viniciusalvess

Solução é usar Socketchanel e ServerSockecketChanel do pacote java.nio. pois ele não cria uma thread para cada socket que conecta , ele tem uma thread “Selectors” que fica lendo uma lista de sockets conectados e dispara eventos quando tem algum dado a ser lido.

Criado 4 de janeiro de 2011
Ultima resposta 15 de mar. de 2012
Respostas 4
Participantes 4