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:
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?
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]
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.
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?
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!
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?
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?
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.