Bom dia pessoal,
Estamos desenvolvendo uma aplição web e quando estamos testando, após um certo tempo de uso, o servidor (tomcat 5.5) lança uma exeção com a seguinte mensagem: “Java heap space” e apartir dai, um abraço, cai a aplicação. Eu vi o pessoal comentando sobre o que poderia ser isso em outros sites e foruns onde eles mencionam a possibilidade da aplição estar acessando um arquivo muito grande, com uma foto por exemplo ou realizando uma operação muito grande com uma string, mas na nossa aplicação nós não estamos acessando nenhum tipo de arquivo e nem fazendo nenhuma operação com strings muito grandes, nós só usamos string para representar os tipos textuais dos beans e como retorno dos métodos da regra de negócio. Será que alguém pode dar uma mão pra gente ?
Desde já muito obrigado a todos pela atenção !
Você pode aumentar um pouco o heap space, alterando um dos parâmetros do Tomcat (procure nos scripts de inicialização a instrução -Xmx e aumente o espaço), mas isso também pode ser sintoma de um problema latente em uma das aplicações, como conexões a bancos de dados que não são encerradas, ou outras estruturas de dados cujo espaço não é corretamente liberado após seu uso. Se você estiver usando o Tomcat com Java 6.0 você pode usar o jmap para gerar um “dump” da memória usada pelo Java, e jhat para gerar um relatório dos objetos.
Exemplo de um relatório gerado pelo jhat para um Eclipse 3.2 rodando sob Java 6.0:
http://localhost:7000/histo/
Heap Histogram
All Classes (excluding platform)
Class Instance Count Total Size
class [C 163679 12453334
class [B 7994 3279542
class java.lang.String 138850 2221600
class [I 24519 2106516
class [Ljava.lang.Object; 15918 1128440
class java.util.HashMap$Entry 46778 748448
class [S 9298 743934
class [Ljava.util.HashMap$Entry; 3394 741396
Aqui estamos vendo que 12.453.334 bytes são gastos em 163.679 arrays de caracteres ("[C"), por exemplo.
Então, é verdade mesmo, eu estava pensando em aumetar o espaço de memória que a jvm pode usar, mas acredito que isso seja um sintoma de que alguma parte da aplicação não está legal. Você mencionou um ponto que eu não tinha pensado, que é a questão da liberação dos objetos de persistencia, vou verificar se essa parte do projeto está funcionando corretamente, dai eu posto a resposta aqui novamente.
Muito obrigado pela ajuda !