如何彻底解决Tomcat报java.lang.OutOfMemoryError: PermGen space问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计492个文字,预计阅读时间需要2分钟。
为什么会出现内存溢出?
PermGen space的全称是Permanent Generation space,指的是内存中用于永久保存数据的区域。OutOfMemoryError: PermGen space从表面上看就是内存溢出,解决方法通常也是增加内存。
为什么会内存溢出?
1. JVM参数设置不当:PermGen space的大小被设置得过小,导致程序运行时无法分配足够的内存空间。
2.大量静态数据:应用程序中使用了大量的静态变量或类,这些数据会存储在PermGen space中,占用大量内存。
3.类加载过多:频繁地加载和卸载类,导致PermGen space中的内存无法有效回收。
如何解决内存溢出?
1. 调整JVM参数:增加PermGen space的大小,例如使用-XX:MaxPermSize参数。
2.优化代码:减少静态变量的使用,避免频繁加载和卸载类。
3.使用其他内存区域:如使用CMS(Concurrent Mark Sweep)垃圾回收器,将PermGen space替换为Metaspace。
1、为什么会内存溢出?
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存溢出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,
GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
这种错误常见在web服务器对JSP进行pre compile的时候。
2、不同情况下的解决方案
一、手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系统)或者catalina.sh(unix系统)1.windows系统 "%CATALINA_BASE%"上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m
2.unix系统"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"
本文共计492个文字,预计阅读时间需要2分钟。
为什么会出现内存溢出?
PermGen space的全称是Permanent Generation space,指的是内存中用于永久保存数据的区域。OutOfMemoryError: PermGen space从表面上看就是内存溢出,解决方法通常也是增加内存。
为什么会内存溢出?
1. JVM参数设置不当:PermGen space的大小被设置得过小,导致程序运行时无法分配足够的内存空间。
2.大量静态数据:应用程序中使用了大量的静态变量或类,这些数据会存储在PermGen space中,占用大量内存。
3.类加载过多:频繁地加载和卸载类,导致PermGen space中的内存无法有效回收。
如何解决内存溢出?
1. 调整JVM参数:增加PermGen space的大小,例如使用-XX:MaxPermSize参数。
2.优化代码:减少静态变量的使用,避免频繁加载和卸载类。
3.使用其他内存区域:如使用CMS(Concurrent Mark Sweep)垃圾回收器,将PermGen space替换为Metaspace。
1、为什么会内存溢出?
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存溢出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,
GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
这种错误常见在web服务器对JSP进行pre compile的时候。
2、不同情况下的解决方案
一、手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系统)或者catalina.sh(unix系统)1.windows系统 "%CATALINA_BASE%"上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m
2.unix系统"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"

