Pessoal eu preciso urgente de umas dicas para melhorar o desempenho da minha aplicação jsf
Eu detectei uns problemas simples
Quando eu inicio a aplicação ela funciona normalmente, apos algum tempo navegando nas páginas e submetendo formulários o consumo de memória vai aumentando aos poucos até chegar a um estado inaceitável.
Por exemplo, se o usuário abrir uma página com muitas informações e atualizar ela várias vezes (Segurando o botão F5) o consumo de memória do servidor sobe muito. É inaceltável um usuário comum ter poder elevar o consumo de memória dessa maneira.
Alguém sabe algumas dicas pra eu melhorar esses problemas de consumo de memória e CPU?
Tem alguma anotação do web xml que limite o numero de requisições de um usuário ou coisa parecida?
Por curiosidade… Seus MBs estão como SessionScoped?
llucas
Todos os beans tão @RequestScoped exceto 1 ou 2 porque são realmente necessários
E eu tenho costume de colocar implements Serializable nos meus bean, isso é um problema?
Hebert_Coelho
llucas:
Todos os beans tão @RequestScoped exceto 1 ou 2 porque são realmente necessários
E eu tenho costume de colocar implements Serializable nos meus bean, isso é um problema?
Creio que não. Esse problema acontece em todas as telas? Ou nas telas que envolvem SessionScoped?
Uma vez que são RequestScoped nenhuma memória deveria permanecer alocada.
llucas
Qualquer tela que carrega a memória sobe um pouquinho (creio que seja normal)
Dependendo da quantidade de dados que a tela tiver a memória sobe mais (talvez seja normal também)
O problema é que a memória vai sempre subindo, mas nunca desce… (isso já não devia acontecer)
Eu imaginei que quando o sistema tivesse em uso a memoria subiria
Quando não recebesse acesso o consumo de memória iria diminuir, mas isso não acontece
Hebert_Coelho
Veja se seus MBs de sessão não estão sendo chamados a todo momento e armazenando informação. Isso deveria acontecer não viu! O.o
llucas
Tirei todos os sessionbean pra testar e da no mesmo
Hebert_Coelho
llucas:
Tirei todos os sessionbean pra testar e da no mesmo
Você está utilizando EJB? Algum @Statefull?
llucas
Não que eu saiba =/
Olha só eu notei que a memória sobe muito quando é carregada uma página com muitas informações do banco de dados
Tipo… Tem página com muito informação mesmo.
Hebert_Coelho
llucas:
Não que eu saiba =/
Olha só eu notei que a memória sobe muito quando é carregada uma página com muitas informações do banco de dados
Tipo… Tem página com muito informação mesmo.
É cara, ta estranho viu. Pode ser cache do hibernate. Caso você esteja utilizando né?
llucas
Eu num configurei nada relacionado ao cache não.
Como é? Eu tenho que desativar é?
Outra coisa que me veio a mente, você tem fechado todas as conexões abertas?
llucas
Acho que pode ser esse negócio de fechar conexões do hibernate então
Como eu faço isso?
Na verdade eu criei uma conexão e eu achei que era única
Eu tenho o hibernate util com a função getSession
Quando eu instancio um Dao ele chama esse getSession e faz operações tipo
@Override
public void salvar(DaoClass daoClass) throws DAOException {
try {
transaction.begin();
session.save(daoClass);
transaction.commit();
} catch (Exception exc) {
throw new DAOException(exc);
}
}
se eu fechar a conexão depois do commint() eu acho que vai dar LazyInitializationException quando eu chamar uma lista
Como eu faço pra abrir uma conexão fazer a operação e não ter problema?
Uma vez eu tentei usar um filtro OpenSessionInView mas não entendi muito bem como funcionava e parei
Eu achei esse post no blog da caelum
Eu que meu problema pode vir desse conjunto de coisas que ele fala aí.
Por enquanto eu vou tentar implementar o Open session in view pras sessões do hibernate e também descobrir como e quando usar esse StatelessSession
Eu também tinha dúvida se minhas configurações do c3p0 poderiama influenciar nisso. Eu fiz assim:
Agora, imagina se fosse instanciar um país? Eita!!! :?
Hebert_Coelho
Eu não sei c c3po é o seu problema.
Acho que você tinha que atacar o fato de você não estar fechando o a transação após realizar alguma tarefa no DB.
R
raf4ever
llucas:
Não que eu saiba =/
Olha só eu notei que a memória sobe muito quando é carregada uma página com muitas informações do banco de dados
Tipo… Tem página com muito informação mesmo.
vc precisa implementar um negócio chamado paginação sob demanda