tomcat7启动报错 内存溢出

错误信息:OutOfMemoryError: PermGen space

环境: 64位 apache-tomcat-7.0.40  

打开这个文件apache-tomcat-7.0.37\bin\catalina.bat, 在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行加下面代码:

set JAVA_OPTS=-Xms1024m -Xmx4096m -XX:PermSize=128m -XX:MaxPermSize=256m

加入后位置如下:

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

set JAVA_OPTS=-Xms1024m -Xmx4096m -XX:PermSize=128m -XX:MaxPermSize=256m
echo Using CATALINA_BASE:   "%CATALINA_BASE%"
echo Using CATALINA_HOME:   "%CATALINA_HOME%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"

 

该错误为:永久保存区域溢出

  PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGenspace区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGenspace错误。这种错误常见在web服务器对JSP进行precompile的时候。但目前的hibernate和spring项目中也很容易出现这样的问题。http://www.javaeye.com/topic/80620?page=1 的帖子有讨论的这个问题。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。

  这一个一般是加大-XX: PermSize   -XX:MaxPermSize 来解决问题。

        "%CATALINA_BASE%" 参数说明:

        -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些

        -Xmx:java heap最大值,使用的最大内存 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。

        -XX:PermSize:设定内存的永久保存区域

        -XX:MaxPermSize:设定最大内存的永久保存区域

  这一般结合第一条使用,比如 set JAVA_OPTS= -Xms1024m -Xmx1024m   -XX: PermSize=128M -XX: PermSize=256M

  有一点需要注意:java -Xmx***M   version 命令来测试的最大堆内存是 -Xmx与 -XX: PermSize的和 比如系统支持最大的jvm堆大小事1.5G,那   -Xmx1024m   -XX: PermSize=768M 是无法运行的。

转载于:https://my.oschina.net/luyaolove/blog/742912

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值