[RESOLVIDO] Socket performance

Boa tarde pessoal,
Estou testando um software de socket porem estou querendo uma perfomance maior na transferencia, existe algumacoisa que possa ser feita para aumentar essa performance, o meu objetivo eh deixar o socket estourando a rede porem o processamento da maquina liberado, o processamento esta ok, porem o socket nao esta usando o maximo da rede.

Obrigado.

Olá

Como mediu? JMeter? Wireshark?

Está usando alguma API de sockets? JBoss-Netty? Grizzly? Mina?

Escreve mais um pouco do que está fazendo.

[]s
Luca

Eu vi pelo grafico que fica no gerenciador de tarefas do windows, e eu estou usando a propria classe Socket do Java…desculpa mas esses programas que vc me disse eu nunca ouvi falar.

Acho que a referencia não tá muito boa não…

Quanto está mostrando, e quanto vc acha que deveria mostrar???

os picos ficam no ~12% eu gostaria que ele aumentasse esse valor, pois assim a troca de informações seria ainda mais rapida correto?!

Não sei como o windows calcula essa porcentagem… mas acho que não chega em 100% mesmo não…

Acho que o windows usa o 100% como a taxa nomial… ex 100Mbps… mas na prática… nao chega nisso…

Sua rede é com fio ou sem fio?

Minha rede eh via cabo.

Entao eh o seguinte, vou explikar mais detalhadamente, meu client esta em java/ windows e meu server em C++/Linux, numa copia de arquivo simples pelo samba, medindo no linux via iptraf minha taxa de transferencia chega a 80Mbs, e quando eu faço isso via socket, minha taxa nao consegue passar de 12Mbs.

Eu testei com um Server e um Client em Java e ambos rodando no windows, e a taxa foi ainda pior, nao passou de 5%.

Jah tentei passar pro socket com os streams:

  • SocketOutputStream
  • OutputStream
  • DataOutPutStream

e nenhum chega a taxa de transferencia da copia simples via samba, o que teve melhor desempenho foi o OutputStream que foi o que chegou a 12Mb.

Nao sei se eh possivel eu chegar igual a taxa da copia, mais gostaria de pelo menos aumentar um pouco, pois 12Mbs para 80Mbs eh bastante diferença.

Obrigado.

Pode ser questao de buffer…

Vc está usando buffer nos sockets??

Entao, estava usando, porem depois de varios testes com e sem, removi, agora estou usando Outputstream puro, mais msm assim nao consegue pegar uma taxa boa…eu ouvi falar sobre NIO, nao sei se alguem jah usou e se eh possivel usar com socket, vou dar uma pesquisada mais sobre isso, pois nao sei mais o que modificar.

Tem um método write do socket… que recebe um array de bytes… usa esse método…

E uma o mesmo array para mandar os bytes… tipo assim

byte[] array = new byte[1024];
while(temDados){
      preencheArray(array);
      out.write(array);
}

Tem o tamanho ótimo do array… que terá mais eficiencia…

Deve ter algoritmos na internet mostrando a melhor forma de usar output stream (mesmo com o bufferedwriter nao é a forma mais otimizada)

[quote=rogelgarcia]Tem um método write do socket… que recebe um array de bytes… usa esse método…

E uma o mesmo array para mandar os bytes… tipo assim

byte[] array = new byte[1024];
while(temDados){
      preencheArray(array);
      out.write(array);
}

Tem o tamanho ótimo do array… que terá mais eficiencia…

Deve ter algoritmos na internet mostrando a melhor forma de usar output stream (mesmo com o bufferedwriter nao é a forma mais otimizada)
[/quote]

Consegui,
voltei a colocar o OutPutStream e um BufferedOutputStream, tanto no server como no cliente e a taxa aumentou demais, consegui pegar 100% da rede.

eu ja tinha feito isso, porem como meu server eh em C++, tive que axar agora um jeito de criar um Generico de Buffered.
valeu, resolvido.