您的位置:首页 > 运维架构 > Tomcat

Tomcat和JBoss加大启动堆和非堆内存,防止内存溢出的方法

2011-04-11 09:48 309 查看
直接上图:

JBoss,找到%bin%/run.bat,用记事本打开,找到以下位置,并添加后面那段(即加大堆内存的方法):



Tomcat,

在%Tomcat%/bin目录下,新建如:run1.bat文件,内容如下:

set java_home=C:/j2sdk1.4.2_08

startup.bat -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:PermSize=256M

即增加了启动的参数,加大启动内存。

在eclipse上的操作,如图:





对于这4个参数的解释如下:

-Xms128m -Xmx512m -XX:MaxPermSize=64m -XX:PermSize=128M

这四个参数其实都是JVM参数,

-Xms128m JVM初始分配的堆内存

-Xmx512m JVM最大允许分配的堆内存,按需分配

-XX:PermSize=64M JVM初始分配的非堆内存

-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

(

关于java内存机制,可参考我的另外一篇博客

/article/7895740.html

)

Xms 和Xmx针对的是堆内存,是java代码可及的内存,是给开发人员使用的内存,比如,你把数据库的海量数据都load到内存里超过分配的堆内存,就会暴内存溢出,这个内存溢出就是OutOfMemory,堆溢出。

-Xms128m JVM初始分配的堆内存。如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。

-Xmx512m JVM最大允许分配的堆内存。

-XX:PermSize=64M JVM初始分配的非堆内存,是JVM自己的,不是给开发人员用的,主要是用来存放Class和Meta的信息,Class文件在被
Load的时候被放入PermGen space区域,它和存放Instance的Heap堆区域不同。比如,这个往往发生在服务器(tomcat等)加载项目时,项目太大又没设置非堆内存的话,启动就会暴这个错,因为大量class文件load到非堆内存,超过了非堆内存限制,就会暴PermGen
space 错误,往往通过设置-XX:PermSize=64M -XX:MaxPermSize=128M解决,增大非堆内存。

-XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space就是内存益出。

这两种抛的异常是不一样的,堆内存益处是java.lang.OutOfMemory,非堆内存溢出会报java.lang.OutOfMemoryError: PermGen space。

对于tomcat安装版,很多人在<CATALINA_HOME>\bin\catalina.bat文件的内容,即在里面增加一行代码:

set JAVA_OPTS=-Xms512m -Xmx512m

但发现不起作用.即通过windows的服务启动tomcat时,实际的内存还是默认的,修改的设置并没有起作用;而通过<CATALINA_HOME>\bin\startup.bat启动却是生效的。这是为什么呢?因为在安装过程中,JVM的初始化参数已经写在注册表中了,由于没有修改注册表中相关参数,所以以windows服务方式启动时,修改的并没有生效。而通过<CATALINA_HOME>\bin\startup.bat启动直接是通过<CATALINA_HOME>\bin\catalina.bat文件中的配置的。你需要重新加载到系统服务中才生效,或者你手工在注册表中查找修改启动值,加载到服务中的时候参数已经配置好了,自己修改sartup.bat不会改变注册表中的参数设置。

解决方法:修改注册表中的参数,加入JVM初始化内存的参数:

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions

值为

-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"

-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"

-Xrs

如加入 -Xms512m -Xmx800m

参考:/article/9493718.html

/article/4733409.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: