Java代码
setJAVA_OPTS=%JAVA_OPTS% -server -Xms800m-Xmx800m -XX:MaxNewSize=256m
注:JAVA_OPTS是保留先前设置。
Linux服务器:
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:$CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS-server -Xms800m-Xmx800m -XX:MaxNewSize=256m"
注:$JAVA_OPTS是保留先前设置。
-------------------解决方案3:-----------------------------
前提:是执行windows的系统服务启动tomcat的方式
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache SoftwareFoundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.0\common\endorsed"
-Xrs
加入 -Xms300m-Xmx350m
重起tomcat服务,设置生效
-------------------解决方案4:-----------------------------
前提:是执行windows的系统服务启动tomcat的方式
在安 tomcat 若有勾 "NT Service(NT/2000/XPonly)"
安 完成後在安 目 的"bin"目 有一 tomcat.exe的 案
先把tomcat的服 停掉
在命令列模式下(运行里输入CMD)
目 切 到tomcat的bin目
用下面的命令把服 移除
tomcat -uninstall "Apache Tomcat 4.1"
接下 ,写个批处理。
容如下
set SERVICENAME=Apache Tomcat 4.1
set CATALINA_HOME=E:\Tomcat 4.1.24
set CLASSPATH=D:\j2sdk1.4.1_01\lib
set JAVACLASSPATH=%CLASSPATH%
set JAVACLASSPATH=%JAVACLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar
set JAVACLASSPATH=%JAVACLASSPATH%;%CATALINA_HOME%\common\lib\servlet.jar
set JAVACLASSPATH=%JAVACLASSPATH%;%JAVA_HOME%\lib\tools.jar
tomcat.exe -install "%SERVICENAME%""%JAVA_HOME%\jre\bin\server\jvm.dll"-Djava.class.path="%JAVACLASSPATH%"-Dcatalina.home="%CATALINA_HOME%" -Xms512m-Xmx768m -start org.apache.catalina.startup.Bootstrap-params start -stop org.apache.catalina.startup.Bootstrap -params stop -out"%CATALINA_HOME%\logs\stdout.log" -err"%CATALINA_HOME%\logs\stderr.log"
注意,从 tomcat.exe -install开始的是最后一行!不要手工回车换行把这一行分成了好几段。保存后在命令行下执行这个bat文件,注意执行的时候将“服务”窗口关闭。
第二种:永久保存区域溢出
原因分析:
PermGenspace的全称是PermanentGeneration space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。但目前的hibernate和spring项目中也很容易出现这样的问题。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,超过了jvm默认的大小(4M),导致内存溢出。
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
这一个一般是加大-XX:PermSize-XX:MaxPermSize 来解决问题。
-XX:PermSize 永久保存区域初始大小
-XX:PermSize 永久保存区域初始最大值
这一般结合第一条使用,比如 set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M-XX:PermSize=256M
有一点需要注意:java -Xmx***Mversion 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的和 比如系统支持最大的jvm堆大小事1.5G,那 -Xmx1024m-XX:PermSize=768M 是无法运行的。
-----------------解决方案1:-------------------------
Linux服务器:
在catalina.sh的第一行增加:
JAVA_OPTS=
-Xms64m
-Xmx256m
-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m
或者
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M-XX:MaxPermSize=128m
Windows服务器:
在catalina.bat的第一行增加:
setJAVA_OPTS=-Xms64m-Xmx256m -XX