Tomcat 6.0 - Erro: java.lang.OutOfMemoryError: PermGen space

Depois de alguns minutos acessando as páginas do sistema, ocorre o ‘travamento’. Pelo log aparece a mensagem de erro: java.lang.OutOfMemoryError: PermGen space
Estou utilizando o Tomcat 6.0 e JDK 1.6. Alguém sabe como solucionar este problema ? Grato.

Já procuraste no google pelo erro?
Verás que tem algumas respostas
(3 dos 4 primeiros links)

Até!

A galera não gosta das araucárias, não querem salvá-las. :frowning:

Pessoal,
O problema foi resolvido colocando os parâmetros abaixo na aba “Java” => Java Options:
-Xms128m
-Xmx1024m
-XX:MaxPermSize=512m

Utilizo Servidor (Windows Server 2003) - Tomcat (Serviço)
Obs.: O último parâmetro aumenta a memória para resolver o problema em questão (PermGen Space).

Só tenha certeza que isso nunca vá estourar.

Olá galera,

estamos atualmente tendo este tipo de problema em nosso servidor.
O servidor em questão é um P3 com Win2000 (não dedicado), com 1 GB de memória, e o servidor é o Tomcat.
Atualmente temos cerca de 7 aplicações publicadas, todas usando Hibernate para acesso à base de dados.
Até pouco tempo atrás, quando tínhamos menos aplicações (umas 3), não tínhamos esse tipo de problema.
Certamente a quantidade elevada de aplicações leva a esse tipo de problema, como visto acima em alguns posts e até mesmo nas pesquisas que fiz.

Alguns sites dizem simplesmente que aumentar a quantidade de memória para o Permgen resolve o caso:

Mas não citam qual sua configuração de servidor para uma comparação.

Neste site, encontrei informações acerca da relação entre essas quantidades de memória, mostrando que a Permgen é uma quantidade adicional de memória à -Xmx:

Em um BLOG encontrei um desenvolvedor eufórico por ter solucionado o problema, aumentando a quantidade de memória, mas depois no mesmo BLOG, em outra ocasião, o mesmo desenvolvedor reconhecendo que esta abordagem, por si só, não resolveu seu problema, e chegando a conclusão:

Então lhes pergunto meus caros:

  1. Aumentar a quantidade de memória para o PermGen resolveu efetivamente o problema de vocês?
  2. Qual a melhor relação Memória Total do Servidor físico/Memória para o PermGen?
  3. Quais outras medidas me aconselham a tomar para minimizar esses problemas?

De cara um servidor dedicado e mais parrudo seria uma solução, mas foi esse que nos concederam até então.
Mas nesse cenário, há algo que se possa fazer para otimizar a utilização de memória?

Grato por qualquer referência ou dica.

[]'s

Dica: no caso do Tomcat, você pode ter mais problemas com “hot deploy” - ou seja, atualizar alguma aplicação enquanto o servidor está rodando. Experimente atualizar as aplicações e reiniciar o Tomcat; é que as classes antigas, que já foram atualizadas (e cuja presença aumenta o consumo de “permgen space”) , permanecem no ar até que o servidor (Tomcat, é claro, não o sistema operacional) seja reiniciado.

Geralmente paramos o servidor (Tomcat) na ocasião de uma publicação. Agendamos com o cliente a manutenção e efetuamos o deploy.
Reiniciar o servidor tem sido uma solução de última hora quando o mesmo não responde às requisições.
Isso é péssimo!

Obrigado pela dica thingol.

[]'s

O Tomcat aqui não está aceitando as configurações de Permgen nem com bomba :frowning:
Estou testando localmente com o WinXP
Alguma idéia do que possa ser?

Failed initializing java C:\tomcat\bin\bootstrap.jar
ServiceStart returned 2

[]'s

Galera,

só consegui sucesso para configurar esses parâmetros criando a seguinte variável de ambiente:

JAVA_OPTS

com o valor:

-Xms64m -Xmx256m -XX: PermSize=256m -XX:MaxPermSize=256m

Já havia tentado isso antes sem sucesso… a diferença é que agora estou inicializando o Tomcat pelo startup.bat.
Antes, quando estava iniciando o serviço pelo executável tomcat5w.exe aparentemente este não reconhecia a variável de ambiente.
E mais… não adiantava setar as variáveis na guia Java/Java Options que não funcionava.

Agora foi :stuck_out_tongue:

[]'s

O tomcat5w.exe lê as opções de JVM (tal como essa história de “Permgen” do registry, e elas devem ser modificadas pelo tal aplicativo que fica residente como um “tray icon”. Não sei se ele põe todas as opções direitinho ou se você tem de mexer no registry “na marra” (eu deveria saber, já que tive de modificar o tal cara, que é em C++, para poder usar em um aplicativo). De qualquer maneira, as opções só ficam valendo se você encerra e reinicia o serviço Apache Tomcat.

Reiniciei várias vezes o serviço (todos esses testes foram feitos localmente) mas inicializando pelo aplicativo do tray icon não pegava os parâmetros nem com reza.

[quote=thingol]Não sei se ele põe todas as opções direitinho ou se você tem de mexer no registry “na marra”
[/quote]

Li em um fórum a respeito de um camarada que colocou direto no registro. Mas como não teríamos acesso a isso no servidor… nem levei em consideração.

Mais uma vez, muito obrigado pelas informações thingol.

[]'s