“Classes atuais carregadas:” aumentando continuamente, PermGen pulando em torno de max?

3

Eu carreguei a carga do meu aplicativo da web nos últimos dias, e notei que as "Classes atuais carregadas" visualizadas por meio do monitoramento JMX estão aumentando continuamente. Ele vai subir e voltar, mas a quantidade média de classes carregadas está aumentando linearmente com o tempo. No início da carga, "Classes atuais carregadas" era apenas alguns milhares. Agora, no entanto, "Classes atuais carregadas" atingiu 130.000 +.

Isso é normal? Eu sei que as classes irão preencher a memória PermGen, mas não é definitivo se a memória PermGen está ou não vazando.

Used: 
    65,124 kbytes
Committed: 
    65,536 kbytes
Max: 
    65,536 kbytes

O número usado move-se entre 62k e 65k, mas ainda não notei nenhuma falha catastrófica no servidor. Minha pergunta, então, é dupla.

Primeiro, isso é normal? Se não for, isso eventualmente fará com que o Tomcat falhe?

    
por Stefan Kendall 14.01.2010 / 17:46

1 resposta

1

Eu tenho medo de que não haja uma resposta clara para a sua pergunta. o maior espaço no permgen deve ser ocupado pelas classes de sua aplicação. é possível que seu aplicativo esteja gerando classes enquanto está em execução. então o comportamento descrito de sua aplicação é o esperado. quando seu aplicativo não estiver gerando classes dinamicamente, o número de classes carregadas e a quantidade de permgen devem ser mais ou menos estáticas.

quando seu aplicativo está criando muitas classes, você pode ter problemas de memória. Você verá java.lang.OutOfMemoryError: PermGen space messages no log do tomcat. Você pode testar isso definindo o perm gen explicitamente com este parâmetro: -XX:MaxPermSize= .

você também pode tentar este parâmetro: -XX:+CMSClassUnloadingEnabled com o coletor de lixo cms. quando o número de classes carregadas não diminui, você ainda tem referências de objetos para essas classes. Isso pode ser um sinal de que você realmente tem um vazamento de memória. mas você definitivamente precisa saber o aplicativo em execução para ter certeza. quando este é o comportamento desejado do aplicativo, você só pode aumentar o espaço para o perm gen. o tamanho do perm gen é adicional ao tamanho do heap.

aqui é uma postagem em stackoverflow que sugere um método para deixar claro qual é o conteúdo do permgen.

    
por 14.01.2010 / 23:47