java.lang.OutOfMemoryError: PermGen space基于idea,MyEclipse或tomcat的详细解决方法以及详解JVM配置参数

1. 引出问题

今天,在回顾开发曾遇到的问题,忽起来java.lang.OutOfMemoryError: PermGen space,如下图所示:

在这里插入图片描述

2. 分析问题

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。

OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。

为什么会内存益出?

这一部分(PermGen space)用于存放ClassMeta的信息。

Class在被 Load的时候被放入PermGen space区域,它和存放InstanceHeap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理。

所以如果你的APPLOAD很多CLASS的话,就很可能出现PermGen space错误。

这种错误常见在web服务器对JSP进行pre compile的时候。

3. 解决问题

3.1 手动设置tomcat的MaxPermSize大小

我们需要修改TOMCAT_HOME/bin/catalina.bat(windows系统)或者catalina.sh(unix系统)

  1. windows系统:

    • 打开TOMCAT_HOME/bin/catalina.bat文件

    • 在这句话echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面添加如下行:

   set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m
  1. unix系统

    • vim打开catalina.sh文件

    • 在这句话echo "Using CATALINA_BASE: $CATALINA_BASE"上面或第一行添加此行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m

    • 或者加入如下行:

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

3.2 基于MyEclipse的修改

如果是通过MyEclipse启动服务器来启动Tomcat的话,需要在MyEclipse里面同样设置内存大小:

MyEclipse中原配置的java虚拟机参数为:

-Xms512m 
-Xmx1024m 
-XX:PermSize=128M 
-XX:MaxPermSize=256M

如下图所示:

在这里插入图片描述

默认配置java虚拟机参数为-Xms64m -Xmx256m,如下图所示:

在这里插入图片描述

  1. 修改eclipse.ini

Myeclipse安装目录下有一个myeclipse.ini配置文件,设置如下:

-vmargs
-Xmx512m
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=64m

我的MyEclipse的安装目录是G:\MyEclipse8.5\Genuitec\MyEclipse 8.5,你可以根据自己的安装目录来。

  1. 设置Default VM Arguments

myEclipse中,打开Windows -> Preferences -> Java -> Installed JREs -> 点击正在使用的JDK -> Edit -> Default VM Arguments文本框中输入:-Xms64m -Xmx256m

  1. 如果是web工程还报内存溢出,可能就要设置tomcat内存。

    • tomcat的安装根目录%tomcat%bin/catalina.bat文件,SET JAVA_OPTS 一行

    • myeclipse配置web服务器配置Window -> Preferences -> Myeclipse -> Servers -> tomcat 5.x -> JDK的Optional Java VM arguments配置为:

-Xms256m 
-Xmx512m 
-XX:MaxNewSize=256m 
-XX:MaxPermSize=256m
  1. 如果是debug模式运行,需要调整debug的虚拟机参数,因为debug模式的默认内存分配时很少的。

选择ArgumentsVM arguments里面填写内存值如下:

-Xms256m 
-Xmx512m 
-XX:MaxNewSize=256m 
-XX:MaxPermSize=256m

3.3 基于idea的修改

如果你的编辑器是idea,可以进行如下修改:

  1. 打开Tomcat配置Edit Configurations

在这里插入图片描述

  1. 点击Server,在VM options输入框输入如下配置
-Xms512m 
-Xmx2048m 
-XX:PermSize=512m 
-XX:MaxPermSize=2048m

在这里插入图片描述

点击ok即可。

如果不点击ok,则配置不生效。

4. jvm配置参数详解

一般的ini文件设置主要包括以下几项:

-vmargs
-Xms40m
-Xmx256m
-XX:PermSize=64M
-XX:MaxPermSize=128M

参数解释为:

  1. -vmargs:说明后面是VM的参数

  2. -Xms40m:虚拟机占用系统的最小内存

  3. -Xmx256m:虚拟机占用系统的最大内存

  4. -XX:PermSize:最小堆大小。一般报内存不足时,都是说这个太小,堆空间剩余小于5%就会警告,建议把这个稍微设大一点,不过要视自己机器内存大小来设置

  5. -XX:MaxPermSize:最大堆大小。这个也适当大些,所以若出现问题,首先请调整-Xms40m:将其设置的小一些,就ok了。

如果你的是1g内存,推荐设置为:

-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=256M
-XX:MaxPermSize=512M

其中-XX:PermSize=64M可以设置大一些,但不能超过MaxPermSize -Xmx512M5%为25.6M。

理论上要求-Xmx的数值与-XX:MaxPermSize必须大于25.6M。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网全栈开发实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值