Este artigo analisa as razões pelas quais o excesso de memória do programa Java é mais detalhado. Compartilhe para todos para sua referência. Os detalhes são os seguintes:
Encontrou um sistema on -line relatado java.lang.outOfMemoryError: erro de espaço permgen, você precisa localizar o problema. Eu consegui isso há muito tempo, e eu realmente não me lembro agora, mas essa é realmente uma pergunta muito interessante. Primeiro, a primeira reação é adicionar parâmetros -xx:+printgcdetails para olhar para os logs GC específicos, mas como o programa é iniciado pelo Tomcat, estou preocupado que haja muitas coisas encapsuladas dentro.
Então, vamos dar uma olhada na causa desse erro.
O nome completo do espaço permgen é o espaço de geração permanente, que se refere à área de preservação permanente da memória Diferentes regiões de heap. Locais pré -Comcompile no JSP. Se você usar um grande número de JAR de terceiros no aplicativo da Web, o tamanho excede o tamanho padrão (4M) da JVM, essa mensagem de erro será gerada.
Então vamos aumentar o tamanho da memória inicial do Permgen:
Adicione no início do Linux no início do arquivo Catalina.sh: Copie o código da seguinte
Além disso, no início do arquivo da catalina.bat no Windows: copie código do código da seguinte
Em seguida, ainda usamos a memória visual para visualizar ferramentas para localizar problemas específicos. A ferramenta preferida para o JDK6 é obviamente suas próprias ferramentas. Desta vez, encontrei outro problema estranho, ou seja, o processo do Tomcat não pôde ser encontrado depois que a ferramenta de análise foi aberta (o JRE foi iniciado depois, e deveria ser suficiente para alterá -lo para JDK).
Como a área local não é permitida, posso conectar remotamente, basta abrir o JMX.
Como acima, adicione o código de cópia ao início do arquivo Java_Opts do arquivo catalina.sh.sh ou catalina.bat da seguinte = 900 0-- DCOM.SUN.MANGEM.JMXREMOTE.SSL = FALSE -DCOM.SUN.MANGEGING.JMXREMOTE.Authenticate = false
Depois de iniciar o programa, verifique se a porta é aberta corretamente para garantir que o controle remoto possa ser conectado.
Estou preguiçoso aqui e desligam o autenticado. Essas configurações são eficazes no meu PC local, mas não é suficiente no servidor. Abra o JVisualVM, clique em Arquivo-> Adicionar conexão JMX e, em seguida, adicione localhost: 1000 e conecte.
Após o programa anterior, observando a mudança de memória por um período de tempo, concentrei -me na situação do Perm. Pode ser que o tamanho da memória perm não tenha entrado em vigor antes, porque a inicialização padrão do PerM é 16m e o máximo é de 64m, e o valor da ocupação real pode realmente causar esse problema. . Se você precisar localizar ainda mais o problema, também poderá usar o BTRACE para visualizar um local onde um determinado método é chamado. Isso pode posicionar se certos métodos são executados conforme o esperado.
Espera -se que este artigo seja útil para o design do programa Java de todos.