【转】Java内存溢出(java.lang.OutOfMemoryError)问题及其解决方法

Java内存溢出(java.lang.OutOfMemoryError)问题及其解决方法

内存溢出有两种情况,如下:

相关配置以Tomcat环境为例

一、java.lang.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大小

  a)对于压缩包版的Tomcat

    修改TOMCAT_HOME/bin/catalina.sh

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

      JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=512m

    或

    修改TOMCAT_HOME/bin/catalina.bat文件

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

      set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

   b)对于安装版的Tomcat, 此图包含了对 PermGen space和Heap space的设置。

    

    在Java Options选项的最后面加入: 
            -XX:PermSize=256M
            -XX:MaxPermSize=386m
            -Xms1024m
            -Xmx1024m

注意:后面都不能有空格哦,不然会报错

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

二、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 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

  解决方法:手动设置Heap size

  a) 对于压缩包版的Tomcat 

     修改TOMCAT_HOME/bin/catalina.sh

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

       JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

    或

修改TOMCAT_HOME/bin/catalina.bat

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

     set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m

b) 对于安装版的Tomcat,如上图。

如何需要同时设置以上两项可以合并为以上设置。

转自 http://my.oschina.net/colorleaf/blog/175581 作者:淘特网  出处: 淘特网  注:转载请注明出处 

时间: 2024-10-20 02:44:11

【转】Java内存溢出(java.lang.OutOfMemoryError)问题及其解决方法的相关文章

Java内存溢出java.lang.OutOfMemoryError: PermGen space

今天把以前的一个项目部署在tomcat,启动没问题.因为用到了webservice,当调用webservice中的方法时一直报内存溢出异常 Exception in thread "http-bio-8087-exec-3"  java.lang.OutOfMemoryError: PermGen space 网上介绍的该内存什么的都试了一遍,然而并没有什么用,首先我得代码没错,调用远程服务方法什么的都对 修改内存版: Xms128m -Xmx1024m -XX:MaxPermSize

内存泄露java.lang.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服务器对

eclipse运行报java.lang.OutOfMemoryError: PermGen space解决方法

一.在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=108m -XX:MaxPermSize=512m ,eclipse跑起来还是报Java.lang.OutOfMemoryError: PermGen space. 后面在网上找了资料,

eclipse 运行报java.lang.OutOfMemoryError: PermGen space解决方法

一.在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=108m -XX:MaxPermSize=512m ,eclipse跑起来还是报java.lang.OutOfMemoryError: PermGen space. 后面在网上找了资料,

java.lang.OutOfMemoryError问题的解决方法

初学者,在使用Tomcat部署java项目的时候,由于程序的不严谨.可以不会报内存溢出的错误.解决方法就是将Tomcat的内存设置大点就可以了. 具体步骤:MyEclipse--Window---preferences---MyEclipse---Servers---Tomcat----Tomcat7.x(选择自己的版本)---jdk,然后在Optional Java VM arguments下面填写“-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPerm

Spring Tool Suite中java.lang.OutOfMemoryError: PermGen space解决方法

最近开发的过程中老是遇到这个问题,网上搜了一下,全是相似的解决方案,修改catalina.sh但是依然不起作用,后来在同事的帮助下解决了此问题,特此记录,备忘 修改Arguments添加 -server -Xms800m -Xmx800m -XX:PermSize=256M -XX:MaxNewSize=1024m -XX:MaxPermSize=512m -Djava.awt.headless=true 我这是8G的内存设置的大小,可以根据自己的实际大小进行调节

老李案例分享:定位JAVA内存溢出

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner的培训中,为了提高学员性能优化的经验,加入了语言以及服务器方面的优化知识,为性能调优的能力打下基础.(大家对课程感兴趣,请加qq:564202718) 项目中最佳实践: 1. 编码规范认真执行.制定公司内部Java编码规范,让项目组成员遵守. 2. 单元测试要覆盖所有分支与边界条件. 3. 代码审查.代码写完了,找资深程序猿走读代码. 4.

Tomcat内存溢出的三种情况及解决办法分析

转自 http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147d8c8c4668d4e419ce3b4c413037bfa6663f405a8e906b6075aa1f0ce9f03176370123b5989b8908dcac925f75ce786a6459db0144dc4ee59a1167877bcd06feaf68bce6e732e2e88893880705dd53742bddaccd095b4

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

最近老是遇见服务器内存溢出的问题,故在网上搜了搜,总结了一些java内存溢出的解决方式 java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环或循环产生过多重复的对象实体: 使用的