Tomcat Memory Overflow Setting Java_Opts
Resposta 1
Defina a memória inicial para o Tomcat Startup
Seu espaço inicial (isto é, -xms) é 1/64 da memória física e o espaço máximo (-xmx) é 1/4 de memória física. Você pode usar o -xmn -xms -xmx e outras opções fornecidas pela JVM
Fazer configurações
3. Exemplos, o seguinte fornece a referência para definir parâmetros da Java JVM no ambiente de memória 1G:
Java_Opts = " -Server -xms800m -xmx800m
-Xx: PermSize = 64m -xx: maxNewsize = 256m -xx: maxpermsize = 128m -djava.awt.headless = true "
Java_Opts = " -Server -xms768m -xmx768m -xx: PermSize = 128m -xx: maxpermsize = 256m -xx:
Newsize = 192m -xx: maxnewsize = 384m "
Catalina_Opts = " -Server -xms768m -xmx768m -xx: PermSize = 128m -xx: maxpermsize = 256m
-Xx: newsize = 192m -xx: maxnewsize = 384m "
Linux:
catalina.sh no /usr/local/apache-tomcat-5.5.23/bin Directory
Adicionado: Java_Opts = ' -XMS512M -xmx1024m'
Se você quiser adicionar "M", significa que é MB, caso contrário, será KB e haverá memória insuficiente ao iniciar o TomCat.
-Xms: valor inicial
-Xmx: valor máximo
-Xmn: valor mínimo
Windows
Junte -se à frente de Catalina.bat
Defina Java_OPTS = -xms128m -xmx350m
Se você iniciar o tomcat com startup.bat, a configuração OK entrará em vigor. A memória de 200m será alocada com sucesso.
No entanto, se você não executar o startup.bat para iniciar o TomCat, mas use o Serviço do Sistema do Windows para iniciar o serviço TomCat, as configurações acima não entrarão em vigor.
Ou seja, o SET Java_OPTS = -xms128m -xmx350m não funciona. Se você alocar 200m de memória acima, você será oom ...
O serviço Windows executa bin/tomcat.exe. Ele lê o valor no registro, não a configuração de catalina.bat.
Solução:
Modifique o Registro HKEY_LOCAL_MACHINE/SOFTWARE/APACH Software Foundation/Tomcat Service Manager/Tomcat5/Parâmetros/JavaOptions
O valor original é
-Dcatalina.home = "c:/apachegroup/tomcat 5.0"
-Djava.endorsed.dirs = "c:/apachegroup/tomcat 5.0/Common/endossado"
-Xrs
Adicionar -xms300m -xmx350m
Reinicie o serviço Tomcat, e as configurações entram em vigor
Resposta 2
Solução de problema de transbordamento de memória JVM do Tomcat
Palavra -chave: Solução de problema de transbordamento de memória JVM do Tomcat
Recentemente, estou familiarizado com um projeto que foi desenvolvido há vários anos. Preciso portar o banco de dados do MySQL para o Oracle. Primeiro, aponte a conexão JDBC com o MySQL, empacote -a no tomcat e execute -a. Não há problema. No entanto, ao apontar a conexão JDBC para o Oracle, o Tomcat lança continuamente o erro java.lang.outOfMemoryError, pesquise no Google na Internet, entenda o mecanismo operacional do tomcat e resolva o problema. Compartilhe para referência.
1. Primeiro é: java.lang.outOfMemoryError: Java Heap Space
explicar:
Configurações do tamanho da pilha
As configurações da pilha JVM consultem as configurações do espaço de memória que a JVM pode provisão durante a execução do programa Java. Quando a JVM iniciar, ele definirá automaticamente o valor do tamanho da pilha. Seu espaço inicial (isto é, -xms) é 1/64 da memória física e o espaço máximo (-xmx) é 1/4 de memória física. Você pode usar o -xmn -xms -xmx e outras opções fornecidas pela JVM para defini -lo. O tamanho do tamanho da pilha é a soma da geração jovem e da generaion titular.
Dica: esta mensagem de exceção será lançada se 98% do tempo for usado para GC e o tamanho da pilha disponível for menor que 2%.
Dica: o tamanho máximo da pilha não deve exceder 80% da memória física disponível. Geralmente, defina as opções -xms e -xmx como o mesmo, enquanto -xmn é 1/4 do valor -xmx.
Solução:
Defina o tamanho da pilha manualmente
Modificar tomcat_home/bin/catalina.bat e adicione a seguinte linha a "echo" usando catalina_base: $ catalina_base ":
Código Java
Definir java_OPTS =% Java_Opts% -server -xms800m -xmx800m -xx: maxnewsize = 256m
Definir java_OPTS =% Java_Opts% -server -xms800m -xmx800m -xx: maxnewsize = 256m
Ou modificar catalina.sh
Adicione a seguinte linha a "Echo" usando Catalina_base: $ catalina_base ":
Java_Opts = "$ java_Opts -server -xms800m -xmx800m -xx: maxnewsize = 256m"
2. Em segundo lugar: java.lang.outofmemoryerror: espaço permgen
razão:
O nome completo do espaço permgen é o espaço de geração permanente, que se refere à área de armazenamento permanente da memória. Essa memória é armazenada principalmente pela JVM em classe e meta informações. A classe será colocada no espaço permgen quando for carregado. É diferente da área de heap onde a instância da classe (instância) é armazenada. O GC (coleta de lixo) não limpará o espaço permgen durante o tempo de execução principal do programa. Portanto, se houver muita classe em seu aplicativo, é muito provável que ocorra um erro de espaço permgen. Este erro é comum quando o servidor da web pré -compilada JSP. Se você usar um grande número de frascos de terceiros no seu aplicativo da web, o tamanho excede o tamanho padrão da JVM (4M), essa mensagem de erro será gerada.
Solução:
1. Defina manualmente o tamanho do maxpermize
Modificar tomcat_home/bin/catalina.bat (catalina.sh sob Linux), no código Java
"Echo" usando catalina_base: $ catalina_base "" Adiciona a seguinte linha:
Definir java_OPTS =% java_Opts% -server -xx: PermSize = 128m -xx: maxpermsize = 512m
"Echo" usando catalina_base: $ catalina_base "" Adiciona a seguinte linha:
Definir java_OPTS =% java_Opts% -server -xx: PermSize = 128m -xx: maxpermsize = 512m
catalina.sh é:
Código Java
Java_Opts = "$ java_Opts -server -xx: PermSize = 128m -xx: maxpermsize = 512m"
Java_Opts = "$ java_Opts -server -xx: PermSize = 128m -xx: maxpermsize = 512m"
Eu também vi outro post e achei muito bom. Os trechos são os seguintes:
Análise java.lang.outOfMemoryError: Espaço de Permgen
Descobri que muitas pessoas atribuem o problema a: Spring, Hibernate, Tomcat, porque geram classes dinamicamente, causando uma pilha permanente na JVM. Depois, existem muitas opiniões diferentes sobre a solução. Algumas pessoas dizem que atualizar a versão do Tomcat para o mais recente nem é necessário Tomcat. Algumas pessoas também duvidam do problema da primavera e é muito quente no fórum da primavera, porque o uso do CBLIB na primavera quando a AOP gerará dinamicamente muitas classes.
Mas a questão é por que o mesmo problema ocorre com esse trunfo de código aberto, então é um motivo mais básico? Tomcat respondeu isso de uma maneira muito obscura nas perguntas e respostas. Sabemos essa pergunta, mas essa pergunta surge de uma questão mais básica.
Então, alguém verificou a JVM mais básica e encontrou a chave do problema. Acontece que a JVM da Sun divide a memória em diferentes áreas, uma das quais é a área do Permenter para armazenar muitas classes e descrições de classes. Originalmente, quando o Sun foi projetado, acreditava -se que essa área era consertada quando a JVM foi iniciada, mas ele não esperava que a dinâmica fosse tão amplamente usada agora. Além disso, esta área possui um mecanismo especial de coleta de lixo. O problema atual é que, depois de carregar dinamicamente a classe nessa área, o GC não pode reciclá -lo!
Para as duas perguntas acima, meu manuseio é:
Adicione a primeira linha de catalina.bat:
Código Java
Definir java_OPTS = -xms64m -xmx256m -xx: PermSize = 128m -xx: maxnewsize = 256m -xx: maxpermsize = 256m
Definir java_OPTS = -xms64m -xmx256m -xx: PermSize = 128m -xx: maxnewsize = 256m -xx: maxpermsize = 256m
Adicione a primeira linha de catalina.sh:
Código Java
Java_OPTS =
-Xms64m
-Xmx256m
-Xx: PermSize = 128m
-Xx: maxnewsize = 256m
-Xx: maxpermsize = 256m
A solução perfeita para o Tomcat Memory Overflow no artigo acima é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.