Para solucionar estes problemas do Tomcat, a solução é revisar a configuração de memória necessária para sua aplicação e aumentar a disponibilidade de memória alocada no Tomcat. Para reconfigurar a memória do Tomcat, é necessário editar os arquivos catalina.bat(Windows) ou catalina.sh(Linux) ou então utilizar o gerenciador do tomcat (aquele que fica na pasta \bin e geralmente termina em w.exe – exemplo: tomcatw.exe).
Caso você opte por utilizar os arquivos Catalina será necessário adicionar a seguinte configuração:
–JvmMx 1024
Isso define o heap máximo disponível para o Tomcat em 1Gb de memória:
Entendendo HeapSpace:
O Heap Space é uma espécie de Memória dinâmica onde o Java armazena suas variáveis e instâncias de objetos. Este espaço de memória pode aumentar ou diminuir ao longo do tempo, dinamicamente, de acordo com a quantidade de objetos usados no programa.
Quantidade inicial de memória dinâmica: O Xms define a quantidade inicial de memória dinâmica alocada no início da JVM.
Quantidade máxima de memória dinâmica: O parâmetro Xmx define a quantidade máxima de memória dinâmica que a Máquina Virtual Java pode alocar para armazenar esses objetos e variáveis.
O famoso PermGen Space
O PermGen Space é parte da memória chamada de estática ou permanente e é utilizada para carregar suas classes (arquivos .class), internalizar Strings (string pool), entre outras coisas no seu projeto.
Quantidade inicial de memória permanente: O parâmetro XX:MaxPermSize define a quantidade máxima de memória permanente que a JVM pode utilizar
Quantidade máxima de memória permanente: O parâmetro XX:PermSize define o tamanho inicial alocado para sua aplicação.
Exemplo:
-XX:MaxPermSize=512m
Esta configuração (-XX:MaxPermSize=512m) define que memória permanente do tomcat tenha no máximo 512Mb de memória.
Como alterar as configurações de memória do Tomcat nos sistemas operacionais:
No Windows:
Para alterar as configurações de memória do Tomcat é obrigado a usar a ferramenta de linha de comando do tomcat6.
O comando altera as configurações de heap space e permgen:
tomcat6 //US//Tomcat6 –JvmMx 1024 ++JvmOptions=”-XX:MaxPermSize=256m”
Este comando deve ser executado a partir do diretório C:/Program Files/Apache Software Foundation/Tomcat 6.0/bin ou de onde o Tomcat tiver instalado.
Na imagem abaixo, podemos verificar a alteraçã ofeita na execução do comando
No Linux:
Para alterar as configurações de memória do Tomcat é necessário acessar via SSH a ferramenta de linha de comando do linux.
O seguinte arquivo catalina.sh, se a instalação foi executa com padrão esse arquivo se encontra no seguinte local.
/usr/Java/apache-tomcat-6.0.18/bin/catalina.sh
Alterar ou incluir a seguinte linha.
export JAVA_OPTS=”-server -Xms768m -Xmx1024m -XX:MaxPermSize=256m”
Após alteração salvar e resetar o Tomcat.
Dica rápida:
Caso esse problema esteja acontecendo dentro de um tomcat interno do Eclipse coloque no Vm Arguments (onde 512, 768 e 256 ficam como opcionais de configuração)
-Xms512M -Xmx768M -XX:PermSize=256M
Heap space
SEVERE: Servlet.service() for servlet jsp threw exception java.lang.OutOfMemoryError: Java heap space
PermGen
MemoryError: PermGen space java.lang.OutOfMemoryError: PermGen space