quarta-feira, 15 de agosto de 2012

RES: [java-br] Socket

·

 



Fala Marcelol,

Perceba que o seu metodo de salvar no banco esta synchronized(mutex), isso
quer dizer que esse método não sera executado em paralelo, algum motivo
especial para isso ?
R. já retirei isso

Reforço a necessidade de realizar os testes de estresse! Enquanto eles
estiverem rolando, utilize o visualvm(ou algum outro aplicativo para
profiling java) para ver o comportamento das threads(se elas estão morrendo
normalmente), também acompanhe suas conexões com netstat -nab no windows ou
netstat -nap no linux.
R. vou verificar

Perceba que sua aplicação esta abrindo uma thread para cada requisição...
ou seja, você tem +- 8 requisições por segundo, em 1hr você teria 28800
threads... será que elas estão morrendo normalmente ? Será que os sockets
estão sendo finalizados realmente ? Tem que testar/monitorar/ajustar
código....
R. tem como saber se o socket está sendo encerrado corretamente? Estou
usando o nios assim, :

Selector acceptSelector = SelectorProvider.provider().openSelector();

ServerSocketChannel ssc = ServerSocketChannel.open();

ssc.configureBlocking(false);

InetAddress lh = InetAddress.getLocalHost();

InetSocketAddress isa = new InetSocketAddress(lh, PORTA);

ssc.socket().bind(isa);

SelectionKey acceptKey = ssc.register(acceptSelector,
SelectionKey.OP_ACCEPT);

int keysAdded = 0;

while ((keysAdded = acceptSelector.select()) > 0) {

Set readyKeys = acceptSelector.selectedKeys();

Iterator i = readyKeys.iterator();

while (i.hasNext()) {

SelectionKey sk = (SelectionKey)i.next();

i.remove();

ServerSocketChannel nextReady =
(ServerSocketChannel)sk.channel();

Socket s = nextReady.accept().socket();

DataInputStream in = new
DataInputStream(s.getInputStream());

DataOutputStream out = new
DataOutputStream(s.getOutputStream());

ExecutaServico es = new ExecutaServico(in);

es.enviar(out);

out.close();

in.close();

}

}

Por padrão no linux por exemplo, você normalmente tem um limite de 1024
arquivos para serem abertos... sugiro que você ajuste para 64000, da uma
olhada no ulimit e /etc/security/limits.conf, além disso existem as
limitações de file descriptors, mas acho que não será necessário.
R. o servidor eh Windows 2008 web, sabe onde posso fazer esse ajuste?

Do que eu entendi da sua aplicação, faria o seguinte:

Fazer com que o sistema aceite por parâmetro um numero máximo de threads,
acredito que 10 seria o suficiente. O resto das requisições entrariam em
uma fila(isso, quando necessário), dessa forma você teria um pool de
threads de até 10 threads(assim você irá aliviar o GB e o sistema
operacional)... Utilizaria singleton para conexão com o banco de dados e
não deixaria a requisição com o banco synchronized(mutex).
R. Onde configuro no sistema o Maximo de threads?

Tem algum material falando sobre singleton, vou pesquisar na web, mas se
tiver alguma coisa especifica.

Já tirei o synchronized.

Cara mais uma vez obrigado pelas dicas.

[]'s

Luciano

[]s

--
Att, Marcelo M. Fleury
Blog - http://marcelomf.blogspot.com/
Slides - http://www.slideshare.net/marcelomf/

"O primeiro dever da inteligência é desconfiar dela mesma." By Einstein

[As partes desta mensagem que não continham texto foram removidas]

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
Y!Encontros. O amor não cai do céu... Comece sua procura agora mesmo!

Quer conhecer gente nova e interessante? Só depende de você.

Ofertas HP: ProBook 4430s
.

__,_._,___

0 comentários:

Pague com LPs do Mister Colibri

Pague com LPs do Mister Colibri
Quer comprar celular,Tablet,pen drive, GPS e muito outros produtos e ainda podendo pagar tudo em LPs ?Pois saiba que isso é possível,basta você visitar o site downloadstotal.com e realizar a sua compra com toda tranquilidade e segurança!!!

Hora

Online

Arquivo do Blog