PermGen space错误解决方法

连线北海
连线北海
连线北海
201
文章
6
评论
2018年9月15日16:37:35 评论 1,168 1459字阅读4分51秒

在Java程序运行的过程中经常会遇到内存溢出的情况,一般来说分为2大类:

  • 第一种是分配给应用的JVM内存不足,在运行中大量需要内存的时候,程序无法及时得到充足的内存分配时就会报错;
  • 另一种则是程序中存在内存泄漏的代码,程序员没有排查修复的,使得内存被不断消耗直至报错。以下报错异常信息经常会出现在Tomcat应用中:
Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen space
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
Exception in thread "State Saver" java.lang.OutOfMemoryError: PermGen space
Exception in thread "AWT-Windows" java.lang.OutOfMemoryError: OutOfMemoryError
  • 关键字PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

  • 解决办法

手动设置MaxPermSize大小:

  • 如果是linux系统,修改TOMCAT_HOME/bin/catalina.sh;
  • 如果是windows系统,修改TOMCAT_HOME/bin/catalina.bat。

echo "Using CATALINA_BASE: $CATALINA_BASE" 上面加入以下行:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

提示:以上参数涉及内存大小的具体参数根据自己机器情况而定。

建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

  • Eclipse优化

针对Eclipse集成Tomcat的时候,可以考虑增加以下参数,修改eclipse.ini文件,修改如下:

-vmargs
-Xms512m
-Xmx1024m
-XX:PermSize=256M 
-XX:MaxPermSize=512M
  • 结语

程序员在开发过程中首先要保证程序的健壮,认真排查可能存在的内存泄漏代码,及时修复BUG,再者在服务器允许的情况下,合理调整程序运行所需的内存空间(并非越大越好),二者兼顾下来保证服务的高可靠性。

继续阅读
weinxin
微信公众号
分享IT信息技术、北海生活的网站。提供北海本地化的信息技术服务。
连线北海
  • 本文由 发表于 2018年9月15日16:37:35
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Tomcat增加管理账户 信息技术

Tomcat增加管理账户

默认情况下,Tomcat的管理功能是关闭的,如何开启? 使用文本编辑工具打开 ${TOMCAT_HOME}\conf\tomcat-users.xml 文件,在最下面可以看到Tomcat默认把用户以及...
Eclipse(STS)调整Tomcat内存 信息技术

Eclipse(STS)调整Tomcat内存

1. 摘要 Tomcat在运行大型的WEB应用的时候,需要调整内存大小来满足运行要求,而在Eclipse开发工具中如何调整Tomcat的内存大小呢? 2. 知识要点 JVM按照其存储数据的内容将所需内...
Tomcat安装为Windows服务 信息技术

Tomcat安装为Windows服务

1 Tomcat8 无论Tomcat的版本是多少,在同一台服务器上部署多个Tomcat实例的时候,一定注意Tomcat服务端口千万不能相互影响,否则将视为冲突服务。 而决定其服务端口的配置文件在:{T...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: