在使用
Java
程序从数据库中查询大量的数据或是应用服务器
(
如
tomcat
、
jboss,weblogic)
加载
jar
包时会出现
java.lang.OutOfMemoryError
异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以
tomcat
环境为例,其它
WEB
服务器如
jboss,weblogic
等是同一个道理):
1.
java.lang.OutOfMemoryError: PermGen space
PermGen space
的全称是
Permanent Generation space
,是指内存的永久保存区域
OutOfMemoryError: PermGen space
。从文字上看就是内存溢出,解决方法是加大内存。为什么会内存溢出,这是由于这块内存主要是被
JVM
存放
Class
和
Meta
信息的,
Class
在被
Load
的时候被放入
PermGen space
区域,它和存放
Instance
的
Heap
区域不同
,GC(Garbage Collection)
不会在主程序运行期对
PermGen space
进行清理,所以如果你的
APP
会
LOAD
很多
CLASS
的话,就很可能出现
PermGen space
错误。这种错误常见在
web
服务器对
JSP
进行
pre compile
的时候。如果你的
WEB APP
下都用了大量的第三方
jar,
其大小超过了
jvm
默认的大小
(4M)
那么就会产生此错误信息了。
解决方法:
手动设置
MaxPermSize
大小
a.
如果
tomcat
是以
bat
方式启动的,则如下设置:
修改
TOMCAT_HOME/bin/catalina.sh
在
“echo "Using
CATALINA_BASE: $CATALINA_BASE"”
上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=512m -XX:MaxPermSize=512m
b.
如果
tomcat
是注册成了
windows
服务,以
services
方式启动的,则需要修改注册表中的相应键值。
打开注册表,找到目录
HKEY_LOCAL_MACHINE\SOFTWARE\Apache
Software Foundation\Procrun 2.0\htfty\Parameters\Java
,其中目录地址中红色标注的(如
htfty
)需要根据不同情况作修改,为
tomcat
服务注册成
windows
服务的名称。
可以看到
JvmMs
和
JvmMx
项,其中
JvmMs
设置最小的内存使用参数,
JvmMx
设置最大的内存使用参数。设置好
JvmMs
和
JvmMx
项的值,重启
tomcat
服务器即可生效。
建议:将相同的第三方
jar
文件移置到
tomcat/shared/lib
目录下,这样可以达到减少
jar
文档重复占用内存的目的。
2.
java.lang.OutOfMemoryError: Java heap space
JVM
堆的设置是指
java
程序运行过程中
JVM
可以调配使用的内存空间的设置。
JVM
在启动的时候会自动设置
Heap size
的值,其初始空间
(
即
-Xms)
是物理内存的
1/64
,最大空间
(-Xmx)
是物理内存的
1/4
。可以利用
JVM
提供的
-Xmn -Xms -Xmx
等选项可进行设置。
Heap size
的大小是
Young Generation
和
Tenured Generaion
之和。在
JVM
中如果
98
%的时间是用于
GC
且可用的
Heap size
不足
2
%的时候将抛出此异常信息。
解决方法:手动设置
Heap size
a.
如果
tomcat
是以
bat
方式启动的,则如下设置:
修改
TOMCAT_HOME/bin/catalina.sh
在
“echo "Using
CATALINA_BASE: $CATALINA_BASE"”
上面加入以下行:
set JAVA_OPTS=-Xms512m
-Xmx512m
b.
如果
tomcat
是注册成了
windows
服务,以
services
方式启动的,则需要修改注册表中的相应键值。
打开注册表,找到目录
HKEY_LOCAL_MACHINE\SOFTWARE\Apache
Software Foundation\Procrun 2.0\htfty\Parameters\Java
,其中目录地址中红色标注的(如
htfty
)需要根据不同情况作修改,为
tomcat
服务注册成
windows
服务的名称。
可以看到
JvmMs
和
JvmMx
项,其中
JvmMs
设置最小的内存使用参数,
JvmMx
设置最大的内存使用参数。设置好
JvmMs
和
JvmMx
项的值,重启
tomcat
服务器即可生效。
提示:
Heap Size
最大不要超过可用物理内存的
80
%,一般的要将
-Xms
和
-Xmx
选项设置为相同,而
-Xmn
为
1/4
的
-Xmx
值。
分享到:
相关推荐
Tomcat出现_PermGen_space 以及内存溢出等解决方案
java.lang.OutOfMemoryError: PermGen space 解决方案
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案
NULL 博文链接:https://eastzhang.iteye.com/blog/1788854
今天小编就为大家分享一篇关于解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
OutOfMemoryError-PermGen-space-的解决方案亲测有效
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage ...
tomcat内存溢出总结 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也... 2.OutOfMemoryError: PermGen space 3.OutOfMemoryError: unable to create new native thread.
JBOSS\Tomcat最大连接数配置和jvm内存配置,解决内存溢出问题 Java中OutOfMemoryError(内存溢出)的情况 第一种OutOfMemoryError: PermGen space 第二种OutOfMemoryError: Java heap space
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
昨天遇到一个线上系统报 java.lang.OutOfMemoryError: PermGen space 错误,需要定位一下问题。很久之前到时弄过这个,现在还真有点不记得了,但这个真的是一个非常有意思的问题,值得好好研究一下。 首先第一...
JSP安装运行步骤及遇错处理方法,包括安装JDBC步骤、安装Tomcat...java.lang.OutOfMemoryError: PermGen space;tomcat 5.5 的The Apache Tomcat Native library which allows optimal performance 的解决方法等等..
针对内存溢出 myeclipse中的配置以及tomcat的配置
更低版本的JDK6、JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet2.5或更高版本(如Tomcat6或更高版本)...
更低版本的JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet3.0或更高版本(如Tomcat7或更高版本)。 ...
更低版本的JDK6、JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet2.5或更高版本(如Tomcat6或更高版本)。...