PermGen Space

Olá amigos do GUJ,

Estou desenvolvendo meu sistema Web, que conta com vários tipos de relatórios e gráficos feitos no IReport, dentre outras funcionalidades… porém me deparei com um problema ao executar um dos relatórios, o Eclipse mostra em seu console o erro: PermGen, sobre falta de memória da JVM, já pesquisei no google e encontrei a solução para este problema que seria a linha de comando abaixo:

:arrow: java -XX:MaxPermSize=128m pacote.MinhaClasse
Porém estou com dúvida de como digitá-la no CMD, pois terei que fazer isso para todas as classes do meu sistema?
Alguém que já tenha passado por isso pode me dar uma luz?!
O meu ini do eclipse está da seguinte maneira:

-vmargs
-Xms40m
-Xmx512m
-Dcom.sun.management.jmxremote
-XX: PermSize=128M
-XX:MaxPermSize=256M

Mas também não resolveu o problema…

Outra dúvida que tenho é que por equanto este sistema está em minha máquina, sendo desenvolvido pontualmente. Quando ele estiver no servidor, sendo acessado por vários usuários, este problema pode voltar a acontecer? Terei que fazer alguma configuração na JVM do Servidor para que isso não aconteça?

Enfim, qualquer ajuda é bem vinda!!!

Gracias e abraço para todos,

:wink:

isso acontece comigo no tomcat depois de alguns deploys.

será que com voce tbm nao é por causa de muitos deploys e não do jasper?

Você pode alterar no atalho para o Eclipse.

Por exemplo:

C:\Java\eclipse\eclipse.exe -Xms256M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=512M

Não precisa colocar em todas as classes do sistema não.

[quote=Henrik]isso acontece comigo no tomcat depois de alguns deploys.

será que com voce tbm nao é por causa de muitos deploys e não do jasper?[/quote]

Sim…

[quote=Java Player]Você pode alterar no atalho para o Eclipse.

Por exemplo:

C:\Java\eclipse\eclipse.exe -Xms256M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=512M

Não precisa colocar em todas as classes do sistema não.[/quote]

Essa linha de comando já está no meu eclipse.ini, e não tem adiantado…

:cry:

no arquivo de inicialização do tomcat voce pode passar alguns parametros pra JVM, é la que voce tem que botar, acredito.

isso pode ate aliviar, mas nao vai resolver. quando aconteceu comigo e fui pesquisar, li em algum canto que dizia que esta area da memoria nao costuma ter muitas modificações, ou seja, os objetos demoram pra serem desalocados, entao quando se faz muito deploy ele vai acumulando lixo e… bang.

[quote=Henrik]no arquivo de inicialização do tomcat voce pode passar alguns parametros pra JVM, é la que voce tem que botar, acredito.

isso pode ate aliviar, mas nao vai resolver. quando aconteceu comigo e fui pesquisar, li em algum canto que dizia que esta area da memoria nao costuma ter muitas modificações, ou seja, os objetos demoram pra serem desalocados, entao quando se faz muito deploy ele vai acumulando lixo e… bang.[/quote]

onde acho este arquivo Henrik?

Obrigada,

:wink:

catalina.sh (se for windows é .bat) dentro da pasta tomcat/bin

procure pela linha JAVA_OPTS

:wink:

[quote=Henrik]catalina.sh (se for windows é .bat) dentro da pasta tomcat/bin

procure pela linha JAVA_OPTS

:wink: [/quote]

Encontrei, mas coloco qual linha de código lá? Dentro de algum if/else?

Grata,

:wink:

Olá Lorena,

Deixe eu complicar um pouquinho a sua vida: dificilmente erros de PermGen em aplicações realmente significam que você deve aumentar o PermGen em si. Normalmente você tem um memory leak no PermGen. Aumentar o PermGen simplesmente vai retardar o memory leak nessas situações.

Recomendo que você use um profiler pra determinar por que há tanto uso do PermGen na sua aplicação. Provavelmente você vai se surpreender com o resultado da análise.

[quote=lorena.dourado][quote=Henrik]catalina.sh (se for windows é .bat) dentro da pasta tomcat/bin

procure pela linha JAVA_OPTS

:wink: [/quote]

Encontrei, mas coloco qual linha de código lá? Dentro de algum if/else?

Grata,

:wink:[/quote]

sim, dentro daquele if/else voce poe esses parametros de permgen que voce ja tem. dentro das " " (aspas) do java_opts vc adiciona elas.

mister__m confirmou o que eu pensava. vai aliviar, mas nao vai resolver.

Olá pessoal, estou com o mesmo problema e acho que o mister_m está certo, no entanto, eu lhes pergunto, o que seria esse tal profiler que ele citou na resposta?

[quote]
Recomendo que você use um profiler pra determinar por que há tanto uso do PermGen na sua aplicação. Provavelmente você vai se surpreender com o resultado da análise.[/quote]
Como seria essa análise com o tal profiler? Alguem sabe?

Profiles:
http://www.ej-technologies.com/products/jprofiler/overview.html

http://labs.jboss.com/jbossprofiler/

Eu utilizei o JProfile quando tive de monitorar memory leaks no PermGen.

E qual era o problema? :stuck_out_tongue:

código ruim + JSF + caracteres especiais + campos CLOB

Aqui eu tenho Java 6 + Tomcat 5.5 + Struts 1.2.x + Hibernate 3.2. Tenho lido bastante sobre o problema, parece que a causa está ligada a problemas no classloader do Struts que faz com que as classes não sejam descartadas no undeploy e consequentemente não sejam coletadas pelo GC. Vou continuar minha pesquisa, quando tiver um resultado eu posto aqui! E claro, se alguém tiver alguma dica, por favor, poste! :smiley:

Abraços a todos!

Pessoal, eu constatei uma coisa nesse problema de “permgen space” com relatorio.

Eu mudei a versao do tomcat, desinstalei a versao “Windows Installer” e simplesmente baixei a versao “Binary Distribution” (mas nao a versao do Windows Installer).
O problema nao ocorreu mais, antes travava ja se tentasse gerar o relatorio pela segunda vez, mas agora nao travou em nenhuma das varias vezes que eu testei.

O problema disso, eh que eu nao posso deixar o tomcat dessa forma no servidor, eu preciso que ele seja um servico do windows pra que inicie automaticamente independente de boot da maquina e tal.

Entao eu quero saber uma possivel solucao de voces.
Eu estou tentando procurar a um bom tempo algo que transforme essa versao do tomcat em servico, mas a unica coisa que achei foi um tal de Procrun, mas esse Procrun transforma uma APLICACAO JAVA que esta no tomcat em servico do windows e nao o CONTAINER TOMCAT como servico do windows entenderam?

Desde ja agradeco qualquer ajuda.

Att.
Rafael

aumente a memoria de sua maquina. antigamente comigo dava esse erro quando o java tava com uns 400MB na memoria hj acontece quando vai mais de 800MB e sempre depois de varios e vários deploys principalmente se usar frameworks pesados como JSF richfaces como é meu caso. Melhor solução é melhorar sua maquina de desenvolvimento

[quote=blackout]Pessoal, eu constatei uma coisa nesse problema de “permgen space” com relatorio.

Eu mudei a versao do tomcat, desinstalei a versao “Windows Installer” e simplesmente baixei a versao “Binary Distribution” (mas nao a versao do Windows Installer).
O problema nao ocorreu mais, antes travava ja se tentasse gerar o relatorio pela segunda vez, mas agora nao travou em nenhuma das varias vezes que eu testei.

O problema disso, eh que eu nao posso deixar o tomcat dessa forma no servidor, eu preciso que ele seja um servico do windows pra que inicie automaticamente independente de boot da maquina e tal.

Entao eu quero saber uma possivel solucao de voces.
Eu estou tentando procurar a um bom tempo algo que transforme essa versao do tomcat em servico, mas a unica coisa que achei foi um tal de Procrun, mas esse Procrun transforma uma APLICACAO JAVA que esta no tomcat em servico do windows e nao o CONTAINER TOMCAT como servico do windows entenderam?

Desde ja agradeco qualquer ajuda.

Att.
Rafael[/quote]

arthurminarini

O problema está no servidor, e não na minha maquina de desenvolvimento.

Já tentei aumentar a memória alterando parametros da JVM.
Criei uma variavel de ambiente JAVA_OPTS e setei o MaxPermSize. Mas acho que ou o tomcat não pegou a nova configuração ou não funcionou mesmo.

E mesmo assim, acho que isso não resolve permanantemente o problema, só retarda, como está acontecendo com vc, inclusive.