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?
L
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?
H
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.
L
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
H
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
L
llucas
Tirei todos os sessionbean pra testar e da no mesmo
H
Hebert_Coelho
llucas:
Tirei todos os sessionbean pra testar e da no mesmo
Você está utilizando EJB? Algum @Statefull?
L
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.
H
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é?
L
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?
L
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!!! :?
H
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