Sessão Hibernate consumindo toda memória

2 respostas
R

Bom dia Senhores,

Existe alguma maneira de impedir que uma sessão hibernate consuma toda a memória do servidor? O caso é o seguinte:

Descobri uma erro de lógica em uma consulta que estava trazendo todos os registros de umas tabelas (milhões de registros), e com isso toda a memória ia sendo consumida, até derrubar a aplicação. O erro de lógica foi sanado, mas me gerou a preocupação de impedir que isso ocorra novamente, partindo do princípio que uma sessão sozinha, mesmo que faça uma consulta gigante, não pode consumir toda a memória do servidor a ponto de comprometer a aplicação… existe alguma maneira de evitar isto?

Obrigado desde já

2 Respostas

javaflex

Se realmente tem motivos para usar o pesado Hibernate, tem que considerar os custos para saber domar uma ferramenta tão complexa. Do contrário, se livre disso.

Em relação a prevenção, testes funcionais automatizados simulando os piores cenários costumam prever problemas antes de acontecer produção.

No mais, pesquise sobre soluções de monitoração, exemplo do que se pode achar: http://stackoverflow.com/questions/1839299/tool-for-monitoring-hibernate-cache-usage

peczenyj

vamos la

como vc evita isso?

  1. uma boa suite de testes onde vc pode, antes de um release ou durante a noite ( ai entra o conceito de nightly build ) faz um mega teste com um banco de dados parrudo e ve se a aplicação vai pro espaço. pode ser tão simples quanto vc reproduzir este problema ( meter milhões de registros e executar aquele procedimento, se a logica mudar este teste vai falhar )

  2. configuração da aplicação:

coisas como
"hibernate.query.plan_cache_max_soft_references"
“hibernate.query.plan_cache_max_strong_references”

vc pode evitar que ele tente pegar milhares de coisas e mandar a memoria pro beleleu

  1. rode seus testes manuais ou automatizados também com um profiler de memoria e estude o que acontece. um bom profiler e testes por algumas horas pode mostrar se a memoria cresce desenfreadamente.

  2. estude o que vc pode fazer no seu garbage collector em termos de fazer um fine tunning nas configurações caso vc tenha uma situação especifica ( vc cria muitos objetos pequenos? cria poucos grandes ? aqui vale um pouco de pesquisa e investigação )

  3. procure erros bobos como concatenação de strings com + ao inves de usar um String Builder, preste atenção em JNIs se vc tiver ( pode ser fonte de memory leak se eles alocam memoria mas não desalocam), etc.

Criado 23 de novembro de 2016
Ultima resposta 23 de nov. de 2016
Respostas 2
Participantes 3