OutOfMemoryError: PermGen space usando tomcat + birt
12 respostas
thiagocg
Olá pessoal, boa tarde!
Estou com um problema aqui um tanto estranho, tenho algumas aplicações que usam jsp e servlets que rodam no tomcat, estas aplicações possuem relatórios gerados pelo birt que estão funcionando normalmente, acontece que quando adiciono uma aplicação jsf ao tomcat caso eu execute algum relatorio o tomcat “cai” gerando o famoso “java.lang.OutOfMemoryError: PermGen space”. O estranho é que se eu retirar a pasta do birt do tomcat, todas as aplicações rodam normalmente sem apresentar erro algum, adicionando o birt viewer no tomcat acontece o erro.
Dei uma procurada no google mas não achei nada relacionado.
Seria interessante sabermos por qual processo esta passando sua aplicacao na hora de gerar o relatorio…
Para analisar o que esta “sobrecarregando” a memoria usada…
abs
thiago.correa
Você pode aumentar a memória alocada para esse processo java! Mas é bom você dar uma revisada no teu código para ver se não possue códigos que consomem muita memória, ou se possue muitos atributos estáticos, como disse o VinnyGodoy é bom entender o porque do erro!
Mas enfim, para aumentar o tamanho do heap basta acrescentar esse parâmetros no processo do tomcat
Obrigado a todos pelas respostas, então como eu relatei, caso eu retire apenas o projeto do birt da pasta webapps do tomcat todas as aplicações rodam normalmente sem estouro de memoria, ja fiz o teste de um dia inteiro com varias pessoas acessando as aplicações e não ocorreu nenhum erro.
Eu imagino que possa ser alguma biblioteca que esteja conflitando entre as do jsf e do birt.
Estou usando o tomcat em modo serviço do windows, eu ja havia setado:
initial memory pool : 256mb
maximum memory pool : 768mb
quanto ao processo é apenas chamado um servlet que faz o direcionamento como:
Existe uma aplicação disponibilizada junto com o jdk que pode te ajudar a descobrir onde está o problema
o caminho dela é
talvez ajude
abs
thiagocg
Olá André, eu ja tinha dado uma olha no jconsole, mas como nunca havia utilizado ele acabei tentando achar alguma outra resposta antes. Mas agora vou da uma olhada melhor nele pra ver como eu monitoro o uso da jvm a partir do tomcat nele.
Obrigado!!
[]'s
thiagocg
Pessoal, pra quem ja usou o jconsole, gostaria da opnião de vcs sobre a imagem em anexo.
Bom vou explicar primeiro, rodei as aplicações conforme eu comentei nos posts anteriores, e monitorando pelo jconsole não consegui identificar pois aparentemente não está havendo nenhum problema com a utilização da memoria disponivel pra vm (imagem em anexo).
O problema é que o jconsole perde a conexão com o tomcat, pois ele cai no momento que eu gero o relatorio.
Alguem poderia me dizer se há alguma evidencia que não estou observando na imagem?
Agora deu certo, ta ai a imagem, valeu pela dica da tag ‘img’ André!
To saindo do meu freela e amanha vou dar mais umas pesquisadas.
André, valeu pela força cara!
[]'s
Andre_Fonseca
oi,
ainda não consigo ver a imagem
thiagocg
André, deve ser a rede que ta bloqueando, pq aqui do meu serviço tb fica indisponivel a imagem e ontem eu olhei do meu freela e tava exibindo a imagem, e tb olhei da casa da minha namorada e tb visualizei a imagem, to testando aqui procurando com a ajuda do jconsole achar alguma possibilidade.
Se quiser posso te enviar a img por email.
Grato.
[]'s
Andre_Fonseca
thiagocg:
André, deve ser a rede que ta bloqueando, pq aqui do meu serviço tb fica indisponivel a imagem e ontem eu olhei do meu freela e tava exibindo a imagem, e tb olhei da casa da minha namorada e tb visualizei a imagem, to testando aqui procurando com a ajuda do jconsole achar alguma possibilidade.
Se quiser posso te enviar a img por email.
Grato.
[]'s
oi,
deve ser isso mesmo
então, para tentar identificar o problema você deve olhar na aba memory e selecioner o perm gen enquanto usa sua aplicação
o jconsole acho que serve apenas para uma análise inicial (apenas monitorar a aplicação), se não conseguir identificar nada acho que talvez o que ajude é usar um profiler, tem o do netbeans por exemplo que dizem ser muito bom mas eu não usei (nem conheço muito netbeans)
aquele artigo da sun tem algumas boas dicas de como usar o jconsole
você por acaso já rodou algo como o findbugs na sua aplicação? esse vazamento de memória pode ser até uma coisa simples como um pool de conexões que não está sendo fechado. o findbugs pode te ajudar com isso
abs
Andre_Fonseca
oi,
agora consegui ver a img, realmente deveria ser coisa do proxy… bom, analisando a img dá pra ver que depois que tem aquele pico de utilização da CPU cai tudo
você conseguiu perceber o que acontece quando tem esse pico?