在使用Java
![](/icons/19360chengxu.gif)
从数据库中查询大量
![](/icons/19360de.gif)
数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常
![](/icons/19360dou2.gif)
这主要是由于应用服务器
![](/icons/19360de.gif)
内存不足引起
![](/icons/19360de.gif)
![](/icons/19360dou2.gif)
这种异常常有以下几种情况(以下以tomcat环境为例
![](/icons/19360dou.gif)
其它WEB服务器如jboss,weblogic等是同
![](/icons/19360yi.gif)
个道理):
1. java.lang.OutOfMemoryError: PermGen space
PermGen space
![](/icons/19360de.gif)
全称是Permanent Generation space
![](/icons/19360dou.gif)
是指内存
![](/icons/19360de.gif)
永久保存区域OutOfMemoryError: PermGen space
![](/icons/19360dou2.gif)
从文字上看就是内存溢出
![](/icons/19360dou.gif)
解决思路方法是加大内存
![](/icons/19360dou2.gif)
为什么会内存溢出
![](/icons/19360dou.gif)
这是由于这块内存主要是被JVM存放Class和Meta信息
![](/icons/19360de.gif)
![](/icons/19360dou.gif)
Class在被Load
![](/icons/19360de.gif)
时候被放入PermGen space区域
![](/icons/19360dou.gif)
它和存放Instance
![](/icons/19360de.gif)
Heap区域区别,GC(Garbage Collection)不会在主
![](/icons/19360chengxu.gif)
运行期对PermGen space进行清理
![](/icons/19360dou.gif)
所以如果你
![](/icons/19360de.gif)
APP会LOAD很多CLASS
![](/icons/19360de.gif)
话
![](/icons/19360dou.gif)
就很可能出现PermGen space
![](/icons/19360cuowu.gif)
![](/icons/19360dou2.gif)
这种
![](/icons/19360cuowu.gif)
常见在web服务器对JSP进行pre compile
![](/icons/19360de.gif)
时候
![](/icons/19360dou2.gif)
如果你
![](/icons/19360de.gif)
WEB APP下都用了大量
![](/icons/19360de.gif)
第 3方jar, 其大小超过了jvm默认
![](/icons/19360de.gif)
大小(4M)那么就会产生此
![](/icons/19360cuowu.gif)
信息了
解决思路方法: 手动设置MaxPermSize大小
a.如果tomcat是以bat方式启动
![](/icons/19360de.gif)
![](/icons/19360dou.gif)
则如下设置:
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
b.如果tomcat是注册成了windows服务
![](/icons/19360dou.gif)
以services方式启动
![](/icons/19360de.gif)
![](/icons/19360dou.gif)
则需要修改注册表中
![](/icons/19360de.gif)
相应键值
打开注册表
![](/icons/19360dou.gif)
找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java
![](/icons/19360dou.gif)
其中目录地址中红色标注
![](/icons/19360de.gif)
(如htfty)需要根据区别情况作修改
![](/icons/19360dou.gif)
为tomcat服务注册成windows服务
![](/icons/19360de.gif)
名称
![](/icons/19360dou2.gif)
可以看到JvmMs和JvmMx项
![](/icons/19360dou.gif)
其中JvmMs设置最小
![](/icons/19360de.gif)
内存使用参数
![](/icons/19360dou.gif)
JvmMx设置最大
![](/icons/19360de.gif)
内存使用参数
![](/icons/19360dou2.gif)
设置好JvmMs和JvmMx项
![](/icons/19360de.gif)
值
![](/icons/19360dou.gif)
重启tomcat服务器即可生效
建议:将相同
![](/icons/19360de.gif)
第 3方jar文件移置到tomcat/shared/lib目录下
![](/icons/19360dou.gif)
这样可以达到减少jar 文档重复占用内存
![](/icons/19360de.gif)
目
![](/icons/19360de.gif)
2. java.lang.OutOfMemoryError: Java heap space
JVM堆
![](/icons/19360de.gif)
设置是指java
![](/icons/19360chengxu.gif)
运行过程中JVM可以调配使用
![](/icons/19360de.gif)
内存空间
![](/icons/19360de.gif)
设置
![](/icons/19360dou2.gif)
JVM在启动
![](/icons/19360de.gif)
时候会自动设置Heap size
![](/icons/19360de.gif)
值
![](/icons/19360dou.gif)
其
![](/icons/19360chushi.gif)
空间(即-Xms)是物理内存
![](/icons/19360de.gif)
1/64
![](/icons/19360dou.gif)
最大空间(-Xmx)是物理内存
![](/icons/19360de.gif)
1/4
![](/icons/19360dou2.gif)
可以利用JVM提供
![](/icons/19360de.gif)
-Xmn -Xms -Xmx等选项可进行设置
![](/icons/19360dou2.gif)
Heap size
![](/icons/19360de.gif)
大小是Young Generation 和Tenured Generaion 的和
![](/icons/19360dou2.gif)
在JVM中如果98%
![](/icons/19360de.gif)
时间是用于GC且可用
![](/icons/19360de.gif)
Heap size 不足2%
![](/icons/19360de.gif)
时候将抛出此异常信息
解决思路方法:手动设置Heap size
a.如果tomcat是以bat方式启动
![](/icons/19360de.gif)
![](/icons/19360dou.gif)
则如下设置:
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
b.如果tomcat是注册成了windows服务
![](/icons/19360dou.gif)
以services方式启动
![](/icons/19360de.gif)
![](/icons/19360dou.gif)
则需要修改注册表中
![](/icons/19360de.gif)
相应键值
打开注册表
![](/icons/19360dou.gif)
找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java
![](/icons/19360dou.gif)
其中目录地址中红色标注
![](/icons/19360de.gif)
(如htfty)需要根据区别情况作修改
![](/icons/19360dou.gif)
为tomcat服务注册成windows服务
![](/icons/19360de.gif)
名称
![](/icons/19360dou2.gif)
可以看到JvmMs和JvmMx项
![](/icons/19360dou.gif)
其中JvmMs设置最小
![](/icons/19360de.gif)
内存使用参数
![](/icons/19360dou.gif)
JvmMx设置最大
![](/icons/19360de.gif)
内存使用参数
![](/icons/19360dou2.gif)
设置好JvmMs和JvmMx项
![](/icons/19360de.gif)
值
![](/icons/19360dou.gif)
重启tomcat服务器即可生效
提示:Heap Size 最大不要超过可用物理内存
![](/icons/19360de.gif)
80%
![](/icons/19360dou.gif)
![](/icons/19360yi.gif)
般
![](/icons/19360de.gif)
要将-Xms和-Xmx选项设置为相同
![](/icons/19360dou.gif)
而-Xmn为1/4
![](/icons/19360de.gif)
-Xmx值
延伸阅读
最新评论