OutOfMemoryError: PermGem space error
14/09/2009 00:00
0
Olá,

estou testando um sistema que desenvolvi totalmente em grails, o sistema eh bem grande tem varios calculos gigantescos, e estou tendo muita dificuldade com problema de memória.

no local que estou hospedando o sistema <!-- m --><a class="postlink" href="http://www.integrator.com">http://www.integrator.com</a><!-- m -->, já fiz um upgrade pra 256mb de memóra e continua caindo o sistema com este erro de memoria. Eu estava com 64mb de memoria o sistema nem fazia o deploy. Fiz o upgrade para 128mb e consegui fazer o deploy mas com poucos acessos o sistema caia, agora estou com 256mb e apesar de demorar mais pra cair, após uma rotina de calculo grande o sistema caiu de novo.

será que existe algo errado na programacao e por isso está usando tanta memória, ou grails usa bastante memória mesmo??

será problema do pool de conexões ou a falta de um (estou somente usando pooled=true no DataSource)?

Carlos André
<!-- e --><a href="mailto:carlinbegale@hotmail.com">carlinbegale@hotmail.com</a><!-- e -->
Tags: Tópicos avançados


0
nestes casos, um monte de coisas podem estar erradas. Sendo assim, vamos por partes ok?

* você mencionou que seu sistema faz alguns calculos meio cabulosos, correto? Neste caso, pode ser que você esteja usando memória desnecessáriamente. Ao que tudo indica, o sistema até inicia, porém cai quando os cálculos são efetuados, correto?

Nestes casos, há alguns pontos que podem ser verificados:

* Se estiver utilizando consultas pesadas no sistema, e estas consultas estiverem utilizando classes que possuam o relacionamento um-para-muitos, já vi situações nas quais o Hibernate (no caso, isto irá vazar para o GORM) ao fazer repetidas consultas utilizando a mesma classe pai cria novas instâncias para ela a cada busca. A solução para este caso poderia ser cachear durante a transação as suas instâncias das classes pai, o que resolveria parte do seu problema.

(sugiro que você nos descreva este cálculo, pois assim alguém aqui do Grails Brasil poderá ter alguma luz conosco para lhe ajudar)

* Caso o problema seja na hora de iniciar a aplicação: para minha surpresa, Grails não utiliza muita memória. Prova disto é que tenho um sistema que é executado com apenas 64 Mb (até hoje tenho arrepios de lembrar) e o bichinho inicia e executa normalmente. Não é nada de complexo, apenas alguns cadastros simples, mas funciona.

Nesta situação, em que ocorrem erros na hora de iniciar a aplicação, algo interessante a ser verificado é o Bootstrap da mesma. Se neste momento houver algum pré-processamento gigante, a memória do servidor será comida neste processo, e até o gc executar novamente, pode ser que um OutofMemory venha a ocorrer.

No entanto, com relação à inicialização, tenho uma dica para você. Inicie o servidor com o parametro -Xms igual ao -Xmx. Isto lhe dará algum ganho de performance, pois ao ser iniciado, o Tomcat já irá alocar a quantidade de memória máxima disponibilizada para ele. AO menos tem TEORIA, você estaria alocando memória RAM ao invés de virtual, o que melhoraria muito a sua performance.


0
Após varios testes percebi que a memoria permgem estava crescendo rapidamente e estourando em 64mb, entao aumentei a memoria para 128mb e percebi que está crescendo até uns 78mb e estabilizando. Entao por enquanto resolveu meu problema, acredito que era só o dimensionamento da memoria, mas vou continuar monitorando pra ver se para nisso ou se ainda vai crescer e estourar os 128mb...

valeu.
19/02/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto