1000 requisições, não aquenta?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Estou desenvolvendo uma aplicação para aguentar várias requisições ao mesmo tempo.
A aplicação começa por uma servlet, que recebe alguns parâmetros por GET e guarda os parâmetros em um arquivo. Sendo que quando coloquei esta servlet para teste, recebendo 1000 requisições de um outro computador dá erro, quando o loop chega mais ou menos em 970 requisições o tomcat me responde um status 500, erro interno no servidor.
Alguém saberia o que está acontecendo? O tomcat não aguenta o tranco? Se não aguenta, alguém saberia recomendar algum outro servidor open-source?
Ou seria melhor usar um arquivo jsp em vez de uma servlet no tomcat?

www.bau-de-dev.com
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

o tomcat aguenta, mas o teu servlet aguenta?

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
Leozin
JWizard
[Avatar]

Membro desde: 18/06/2005 21:01:26
Mensagens: 2310
Localização: São Paulo/SP
Offline

você que tem que montar um ambiente que suporte essas 1000 requisições

não é simplesmente cuspir código em um servlet que vai aguentar 1 milhão de requisições/seg

já fizemos testes aqui com struts com mais de 30 mil requisições de crud (cerca de 10/seg) e aguentou (claro, tivemos que aumentar um pouco da memória da jvm)

http://www.leozin.com.br/blog
[ICQ]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

como montar este ambiente?
A minha servlet é bem simples, recebe uns parâmetros por get, e grava em um arquivo os parâmetros, abre e fecha o arquivo e usa o log4j para fazer uns logs. Coisa bem simples.

www.bau-de-dev.com
rubinelli
JavaEvangelist
[Avatar]

Membro desde: 26/04/2005 11:18:25
Mensagens: 469
Offline

Você abre, altera, e fecha o mesmo arquivo a cada requisição? Provavelmente esse é o gargalo, mas o certo mesmo é arranjar uma ferramenta pra fazer o profiling da sua aplicação.
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Vou colocar o código da Servlet para vcs darem uma olhada.

Abaixo é o código da Servlet:



Abaixo a classe que servlet abre:

This message was edited 1 time. Last update was at 18/02/2008 11:08:45


www.bau-de-dev.com
LeoMarola
JavaGuru
[Avatar]

Membro desde: 17/07/2006 10:35:11
Mensagens: 201
Localização: Rio de Janeiro
Offline

Bom dia Jedi,

Provavelmente seu Tomcat deve estar com os parêmetros default de configuração.

Além de aumentar os parâmetros de memória da JVM como foi dito pelo amigo a pouco, se vc pretende simular um ambiente com o Tomcat recebendo uma carga dessa, poderia pensar tb em por um Apache na frente ;D

Caso você não queira perder muito tempo integrando um Apache HTTP Server e um Tomcat, dê uma olhada aqui:

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Acredito que ajude

@Test

SCJP 5
SCWCD 5
SCBCD 5
SCEA 5 (Starting..)

[MSN]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

IO é uma das operações mais caras, uma idéia seria criar um buffer para estas escritas em arquivo, assim não iria bloquear a requisição.

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

como posso aumentar a memória da jvm? E sim está tudo default.....
E vou mudar de IO para buffer.....muito obrigado pela dica......

This message was edited 1 time. Last update was at 18/02/2008 11:18:10


www.bau-de-dev.com
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Deixe seus properties em memória. (economiza IO)

Utilize uma maneira melhor de escrever esse arquivo(de preferencia não escreva em arquivo a cada requisição).

Se for utilizar arquivos mesmo, utilize NIO.

Transfira o máximo de dados possíveis para a memória(cache) para aumentar a sua performance
.

Tente diminuir ao máximo a criação de objetos por requisição.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Teria como criar um conexão com um arquivo uma única vez?
Por exemplo, a primeira requisição foi feita, o arquivo foi aberto e ai deixá-se a conexão em memória, para que as próximas requisições possoam usar a mesma conexão, depois de um certo tempo da conexão não sendo usada fechá-se a mesma.

www.bau-de-dev.com
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

de IO para buffer, mas mesmo assim está dando erro.
Acho que o problema é a configuração do tomcat, como posso configurá-lo para um ambiente de produção? aonde encontro algum tutorial de configuração?

www.bau-de-dev.com
kubanacan
JavaGuru

Membro desde: 24/07/2005 21:18:12
Mensagens: 200
Localização: Rio de Janeiro
Offline

Aproveitando..
onde aqui no GUJ ocorreu esses testes?

existe algum post?

normalmente eu configuro a Jvm aumentando a memória, mas como disse o Leozin, minha aplicação 'código"
deve está preparada p isso? como?

abraços
chicobento
JavaGuru
[Avatar]

Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline

Seu tomcat está configurado pra receber quantas conexões ?

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html wrote:Each incoming request requires a thread for the duration of that request. If more simultaneous requests are received than can be handled by the currently available request processing threads, additional threads will be created up to the configured maximum (the value of the maxThreads attribute). If still more simultaneous requests are received, they are stacked up inside the server socket created by the Connector, up to the configured maximum (the value of the acceptCount attribute. Any further simultaneous requests will receive "connection refused" errors, until resources are available to process them.


[]'s

SCEA 5
[MSN]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Aonde posso ver esta informação?

www.bau-de-dev.com
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team