文章目录

  • 1. 引出问题
  • 2. 分析问题
  • 3. 解决问题
    • 3.1 手动设置tomcat的MaxPermSize大小
    • 3.2 基于MyEclipse的修改
    • 3.3 基于idea的修改
  • 4. 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。

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

  1. 解决java虚拟机内存不足的错误 java.lang.OutOfMemoryError: PermGen space 没有文件TOMCAT_HOME/bin/catalina.sh

    网上解决java.lang.OutOfMemoryError: PermGen space这个错误多数采用的是修改文件TOMCAT_HOME/bin/catalina.sh 的配置,经过我的实践发现此 ...

  2. Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

    2019独角兽企业重金招聘Python工程师标准>>> 一.错误信息 java.lang.reflect.InvocationTargetException     at sun.r ...

  3. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法...

    摘要: tomcat部署多个项目后,启动tomcat正常,访问项目时却会出现该错误 在网上查了查又试了好几次,才解决,将解决方法记录下来,以方便以后查看或让遇到同样问题的朋友有个参考 PermGen ...

  4. 内存溢出数值jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space...

    废话就不多说了,开始... 每日一道理 站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔:魏武帝扬鞭东指,壮心不已:陶渊明悠然南山,饮酒采菊--他们选择了永恒,纵然谄媚诬蔑视听,也不随其流 ...

  5. java.lang.OutOfMemoryError: PermGen space

    java.lang.OutOfMemoryError: PermGen space 摘要 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域 ...

  6. java.lang.OutOfMemoryError: PermGen space及其解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  7. IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常

    IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常 参考文章: (1)IntelliJ IDEA的Maven项目 ...

  8. JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space

    JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space 参考文章: (1)JAVA编译异常处理:java.lang.OutOfMemoryError: ...

  9. Tomcat发布Maven项目遇到异常:java.lang.OutOfMemoryError: PermGen space

    前言: 本问题出现在tomcat 7发布 web3.0Maven项目的时候出现. 问题阐述: 异常:java.lang.OutOfMemoryError:PermGen space 解决如下: 1.  ...

最新文章

  1. 广联达2018模板算量步骤_老师傅带你学造价,广联达GTJ2018图文详解,小白也能学会的软件...
  2. html5抬头,HTML !DOCTYPE 标签
  3. 怎么修改antd mobile中picker样式_修改 iPhone 双信号方法,超级好玩
  4. React开发(199):参数请求错误修改请求
  5. Guacamole 是浏览器查看桌面的VNC
  6. cognos报表制作学习(一)cognos如何新建普通的reportstudio报表
  7. 百度硬盘搜索使用指南
  8. WIN7英文操作系统,中文语言包安装。及部分开发环境,软件中文乱码问题解决。
  9. matlab 二维离散傅立叶变换,二维离散傅里叶变换.PPT
  10. vSphere虚拟网络02 - 虚拟交换机
  11. 使用机器学习预测天气_使用机器学习来预测患者是否会再次入院
  12. hive中导入csv,把csv导入到hive表中步骤
  13. 盖世神器PowerPro使用视频教程-1. 程序的安装概述
  14. rocketMQ —— 02(集群搭建、rocketmq工作原理)
  15. 微信公众号【程序员杂货铺】
  16. 算法分析——Hanoi塔问题
  17. 一篇不错的项目管理之道
  18. 游戏设计自学记录(27)
  19. Micro(三)[服务创建]
  20. DPARSF关键字含义

热门文章

  1. 2018年5月9日至5月10日
  2. revit对齐命令选不中_Revit对齐命令的应用方法:关于Revit中模型填充图案线与门窗构建对齐及标注的方法...
  3. 使用OpenSSL自签证书
  4. AITO问界系列大卖背后,华为正在孵化更多的“赛力斯”
  5. 公司实施股权激励有什么用?
  6. 最新希腊计算机,史前文明出现了?希腊海底出现一台计算机,距今已2000多年!...
  7. 全网最细最全OLAP之clickhouse笔记|clickhouse文档|clickhouse揭秘文档(一)--clickhouse简介
  8. 国行版 P30 价格公布,除了拍照逆天,这些功能也很强
  9. pic单片机c语言延时程序,PIC单片机C语言精确控制时间
  10. 实习------Java基础