博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PermGen space错误解决方法
阅读量:5059 次
发布时间:2019-06-12

本文共 4832 字,大约阅读时间需要 16 分钟。

  做项目的时候,突然遇到的这个问题,当时tomcat开启了有2个小时,然后点击页面的时候出现:PermGen space

 在网上查找了好久,终于找到了解决办法。

转载:http://www.cnblogs.com/xwdreamer/archive/2011/11/21/2296930.html

在看下文之前,首先要确认意见事情,就是你是如何启动tomcat的,我们在平时的开发环境当中,都是通过startup.bat方式启动tomcat的,那么你按照下面的方式,去修改/bin/catalina.bat是没有问题的。但是如果你是生产环境下,我们一般都希望使用windows服务方式去启动tomcat,此时之前修改的配置文件是没有用的。因为windows服务启动tomcat不再去加载catalina.bat当中的参数了,而是去加载注册表中的参数,所以我们需要修改注册表。

HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Procrun 2.0/Tomcat_APPNAME/Parameters/Java,修改JvmMs和JvmMx的值,当前我都将其设定为1024,也就是1个G的容量。具体性能再后面继续观察。 之前还真不知道windows服务启动和startup.bat启动的区别。 windows服务器启动是在注册表中加载参数,startup.bat启动是在catalina.bat加载参数。

1.参考:

2.报错:

Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen spaceException in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen spaceException in thread "State Saver" java.lang.OutOfMemoryError: PermGen spaceException in thread "AWT-Windows" java.lang.OutOfMemoryError: OutOfMemoryError

3.原因:

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)那么就会产生此错误信息了。

4.解决方法1: 

手动设置MaxPermSize大小,如果是linux系统,修改TOMCAT_HOME/bin/catalina.sh,如果是windows系统,修改TOMCAT_HOME/bin/catalina.bat,

在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

5.解决方法2

修改eclipse.ini文件,修改如下:

-vmargs-Dosgi.requiredJavaVersion=1.5-Xms128m-Xmx512m-XX:PermSize=64M -XX:MaxPermSize=128M

如果还报错,可以考虑如下修改

-vmargs-Dosgi.requiredJavaVersion=1.5-Xms512m-Xmx1024m-XX:PermSize=256M -XX:MaxPermSize=512M

报错:

2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc严重: The web application [/Application] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/Application] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/Application] appears to have started a thread named [AWT-Windows] but has failed to stop it. This is very likely to create a memory leak.2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/Application] appears to have started a thread named [Thread-14] but has failed to stop it. This is very likely to create a memory leak.2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap严重: The web application [/Application] created a ThreadLocal with key of type [net.sf.json.AbstractJSON$1] (value [net.sf.json.AbstractJSON$1@3661eeb]) and a value of type [java.util.HashSet] (value [[]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.2011-11-21 21:10:50 org.apache.catalina.core.ApplicationContext log信息: Initializing Spring FrameworkServlet 'Dispatcher'

修改catalina.bat

添加

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"

样例

#   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension#                   (JSSE) installation, whose JAR files will be added to the#                   system class path used to start Tomcat.##   CATALINA_PID    (Optional) Path of the file which should contains the pid#                   of catalina startup java process, when start (fork) is used## $Id: catalina.sh 609438 2008-01-06 22:14:28Z markt $# ----------------------------------------------------------------------------- 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"  # OS specific support.  $var _must_ be set to either true or false.cygwin=falseos400=falsedarwin=falsecase "`uname`" inCYGWIN*) cygwin=true;;OS400*) os400=true;;Darwin*) darwin=true;;esac # resolve links - $0 may be a softlinkPRG="$0"

具体参数根据自己机器情况而定

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

转载于:https://www.cnblogs.com/gwq369/p/5663209.html

你可能感兴趣的文章
C#Hashtable与Dictionary性能
查看>>
10个让你忘记 Flash 的 HTML5 应用演示
查看>>
8个Python面试必考的题目,小编也被坑过 ToT
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
centos 图形界面和命令行界面切换(转载)
查看>>
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>