Tomcat和JBoss加大启动堆和非堆内存,防止内存溢出的方法
2011-04-11 09:48
309 查看
直接上图:
JBoss,找到%bin%/run.bat,用记事本打开,找到以下位置,并添加后面那段(即加大堆内存的方法):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/2b612fef3970d241bce46003ad308ddb.gif)
Tomcat,
在%Tomcat%/bin目录下,新建如:run1.bat文件,内容如下:
set java_home=C:/j2sdk1.4.2_08
startup.bat -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:PermSize=256M
即增加了启动的参数,加大启动内存。
在eclipse上的操作,如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/681f0e1e4500b0f36422764d5e352301.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/950e17a60ad2d21feadb3b1d174cfbee.gif)
对于这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
JBoss,找到%bin%/run.bat,用记事本打开,找到以下位置,并添加后面那段(即加大堆内存的方法):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/2b612fef3970d241bce46003ad308ddb.gif)
Tomcat,
在%Tomcat%/bin目录下,新建如:run1.bat文件,内容如下:
set java_home=C:/j2sdk1.4.2_08
startup.bat -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:PermSize=256M
即增加了启动的参数,加大启动内存。
在eclipse上的操作,如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/681f0e1e4500b0f36422764d5e352301.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/950e17a60ad2d21feadb3b1d174cfbee.gif)
对于这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
相关文章推荐
- Tomcat启动的初始内存设置(Tomcat 的JVM 内存溢出)
- 扩大myeclipse中tomcat启动后使用的内存方法
- eclipse tomcat内存溢出,加大内存
- eclipse+tomcat开发,debug启动导致内存溢出解决方法
- eclipse tomcat内存溢出,加大内存
- eclipse tomcat内存溢出,加大内存
- 增加eclipse启动的Tomcat内存的方法
- 同一台机器上多个tomcat启动造成的内存溢出问题的解决方法。
- Tomcat启动的初始内存设置(Tomcat 的JVM 内存溢出)
- 增加eclipse启动的Tomcat内存的方法
- 在myeclipse里加大tomcat内存,jdk内存方法
- eclipse 中加大tomcat 运行内存的方法
- eclipse配置tomcat加大内存的方法
- 增加eclipse启动的Tomcat内存的方法 tomcat内存增加
- idea tomcat 启动项目报内存溢出 解决方法
- 增加eclipse启动的Tomcat内存的方法
- eclipse配置tomcat加大内存的方法
- 增加eclipse启动的Tomcat内存的方法 tomcat内存增加
- tomcat启动内存溢出也运行时内存溢出
- 直接双击启动tomcat中的startup.bat闪退原因及解决方法