PermGen Space e tomcat como serviço no Windows

9 respostas
H

Ola :!:

eu tenho uma aplicação que usa Hibernate e Spring com relatorios em IReports … eu sei que esse tipo de aplicação aumenta a quantidade de classes permanentes na memoria da JVM … sendo que a aplicação está com serviço no windows, nesse caso, o TomCat 5.5.9

depois de algum tempo navegando o seguinte erro aparece no arquivo de log do tomcat

#Aplicacao# ERROR [[jsp]     ] Servlet.service() for servlet jsp threw exception 15:19:48,238 [http-8080-Processor22]    
 java.lang.OutOfMemoryError: PermGen space
#Aplicacao# ERROR [[app]     ] Servlet.service() for servlet app threw exception 15:19:48,238 [http-8080-Processor22]    
 java.lang.OutOfMemoryError: PermGen space

eu já coloquei algumas variaveis quando utilizava o tomcat pelo proprio eclipse … sendo que quando eu coloco como serviço do Windows o erro reaparece.

já pesquisei em varios lugares sendo que todos as soluções que encontrei foram para resolver quando o tomcar é iniciado normalmente … sendo que não funciona em serviço. :frowning:

queria saber como aumentar o tamanho perm size no tomcat assim.

Muito obrigado ! :smiley:

9 Respostas

T

Disseram que aquela aplicação de configuração do Tomcat no Windows (que aparece como o ícone de um gatinho no taskbar) poderia configurar algumas coisas, mas parece que não está deixando salvar essa configuração de -XX:+PermGenSpace ou coisa parecida. Clique com o botão direito, escolha Configure, e veja se isso pode ser configurado.

H

Sendo que não tem o ícone na taskbar da maneira que foi instalada … na verdade não foi instalado … foi copiado e colado … :smiley:

eu modifiquei o arquivo service.bat do tomcat … mas parece q não funcionou muito bem

eu fiz assim …

"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp" --JvmMs 512 --JvmMx 512 --JvmX:MaxPermSize=512m

só que parece que nao funcionou … eu coloquei a variavel

-Dcom.sun.management.jmxremote

Pra ver se rodava o JConsole da jvm … mas parece q nao funcionou também :frowning:

Mas mesmo assim vlw !!! eu vou ver se consigo rodar o “configure” que outro lugar

Mas se alguem ainda tem alguma ideia … isso pode ajudar muita gente no futuro :smiley:

H

Mas ninguem tem ideia :?:

Eu estava pensando em colocar as variaveis no registro do windows … mas eu nao sei se funciona direito pq nao conheço :roll: nenhum comando da jvm para mostrar as variaveis que estão “ativas” nela :?

M

Edite o arquivo catalina.bat e insira a seguinte linha:

export JAVA_OPTS="-Xms384M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"

Essa linha indica que a JVM tem um tamanho total de 512Mb e a Perm o máximo de 128Mb.
Tive o mesmo problema só q em um servidor linux. Meu caso foi sanado após alteração do arquivo.

N

markin:
Edite o arquivo catalina.bat e insira a seguinte linha:

export JAVA_OPTS="-Xms384M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"

Essa linha indica que a JVM tem um tamanho total de 512Mb e a Perm o máximo de 128Mb.
Tive o mesmo problema só q em um servidor linux. Meu caso foi sanado após alteração do arquivo.

Alguém saberia me dizer onde posso inserir essa linha de comando dentro do catalina.bat?
Obrigado.

@echo off
if "%OS%" == "Windows_NT" setlocal
rem ---------------------------------------------------------------------------
rem Start/Stop Script for the CATALINA Server
rem
rem Environment Variable Prequisites
rem
rem   CATALINA_HOME   May point at your Catalina "build" directory.
rem
rem   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
rem                   of a Catalina installation.  If not present, resolves to
rem                   the same directory that CATALINA_HOME points to.
rem
rem   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
rem                   "stop", or "run" command is executed.
rem
rem   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
rem                   the JVM should use (java.io.tmpdir).  Defaults to
rem                   %CATALINA_BASE%\temp.
rem
rem   JAVA_HOME       Must point at your Java Development Kit installation.
rem
rem   JAVA_OPTS       (Optional) Java runtime options used when the "start",
rem                   "stop", or "run" command is executed.
rem
rem   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
rem                   (JSSE) installation, whose JAR files will be added to the
rem                   system class path used to start Tomcat.
rem
rem   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
rem                   command is executed. The default is "dt_shmem".
rem
rem   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
rem                   command is executed. The default is "jdbconn".
rem
rem $Id: catalina.bat,v 1.9.2.1 2004/08/21 15:49:47 yoavs Exp $
rem ---------------------------------------------------------------------------

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME%" == "" goto gotHome
set CATALINA_HOME=%CURRENT_DIR%
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set CATALINA_HOME=%cd%
cd %CURRENT_DIR%
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

rem Get standard environment variables
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"

rem Get standard Java environment variables
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
echo Cannot find %CATALINA_HOME%\bin\setclasspath.bat
echo This file is needed to run this program
goto end
:okSetclasspath
set BASEDIR=%CATALINA_HOME%
call "%CATALINA_HOME%\bin\setclasspath.bat"

rem Add on extra jar files to CLASSPATH
if "%JSSE_HOME%" == "" goto noJsse
set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar
:noJsse
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar

if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set CATALINA_TMPDIR=%CATALINA_BASE%\temp
:gotTmpdir

rem ----- Execute The Requested Command ---------------------------------------

echo Using CATALINA_BASE:   %CATALINA_BASE%
echo Using CATALINA_HOME:   %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
echo Using JAVA_HOME:       %JAVA_HOME%

set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=

if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_shmem
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=jdbconn
:gotJpdaAddress
shift
:noJpda

if ""%1"" == ""debug"" goto doDebug
if ""%1"" == ""run"" goto doRun
if ""%1"" == ""start"" goto doStart
if ""%1"" == ""stop"" goto doStop
if ""%1"" == ""version"" goto doVersion

echo Usage:  catalina ( commands ... )
echo commands:
echo   debug             Start Catalina in a debugger
echo   debug -security   Debug Catalina with a security manager
echo   jpda start        Start Catalina under JPDA debugger
echo   run               Start Catalina in the current window
echo   run -security     Start in the current window with security manager
echo   start             Start Catalina in a separate window
echo   start -security   Start in a separate window with security manager
echo   stop              Stop Catalina
echo   version           What version of tomcat are you running?
goto end

:doDebug
shift
set _EXECJAVA=%_RUNJDB%
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd

:doRun
shift
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd

:doStart
shift
if not "%OS%" == "Windows_NT" goto noTitle
set _EXECJAVA=start "Tomcat" %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd

:doStop
shift
set ACTION=stop
goto execCmd

:doVersion
%_EXECJAVA% -classpath "%CATALINA_HOME%\server\lib\catalina.jar" org.apache.catalina.util.ServerInfo
goto end


:execCmd
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end

:end
T

Coloque esse codigo em que vai funcionar, coloque em um lugar estrategico respeitando comentario e etc do catalina.bat cuidado com os “gotos”

set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9004

vai funcionar , lembrando para windows…

T

Opa, Corrigindo , esso codigo é para monitorar a memoria e não para aumenta-la

T

Lembramdo…
Tomcat 6
conficuração shell ou seja sem serviço.
com esse arquivo a jvm vai ficar com 1024 de memoria no maximo, e o kPerm 256 no maximo.Conforme essas linhas inclusas no catalina.bat

Para o servidor ser monitorado set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false

para aumentar a memoria set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -XX:PermSize=128m -XX:MaxPermSize=256m

http://download900.mediafire.com/d2wa88wkcfxg/y646lugs6u54aub/catalina.rar

preparei esse arquivo de configuração pra quem esta com problema emem edita-lo é so substituilo no \bin

caso seu tomcat for por serviço, edite essa linha:"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" --JvmMs[b] 512m[/b] --[b]JvmMx 1024m[/b]

service.bat, no campo em negrito

vale a pena lembrar que os valores do JvmMx/JvmMs tem que ser na escala (128m , 256m, 512m ) e o JvmMx(Maximo) é Sempre o doblo do JvmMs.

flw…

M

markin:
Edite o arquivo catalina.bat e insira a seguinte linha:

export JAVA_OPTS="-Xms384M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"

Essa linha indica que a JVM tem um tamanho total de 512Mb e a Perm o máximo de 128Mb.
Tive o mesmo problema só q em um servidor linux. Meu caso foi sanado após alteração do arquivo.

[color=darkblue] Isso funcionou para mim também, em uma máquina Windows funcionava corretamente mas em uma máquina Mac OS estavam ocorrendo pequenos erros de PermSpace, coloquei os parâmetros no Run Configurations :

-XX:PermSize=64m -XX:MaxPermSize=128m

Clico no server
Open Launch configurations
Coloco os parâmetro no Arguments

Isso no eclipse é claro

[/color]

Criado 13 de setembro de 2007
Ultima resposta 17 de fev. de 2011
Respostas 9
Participantes 6