java.lang.OutOfMemoryError 异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得 JVM 不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方
软件中的 BUG; 5.启动参数内存值设定的过小; 常见错误提示: 1.tomcat:java.lang.OutOfMemoryError: PermGen space 2.tomcat:java.lang.OutOfMemoryError: Java heap space 3.weblogic:Root cause of ServletException java.lang.OutOfMemoryError 4.resin:java.lang.OutOfMemoryError 5.java:java.lang.OutOfMemoryError 解决; 1.应用服务器提示错误的解决: 把启动参数内存值设置足够大。
2.Java 代码导致错误的解决: 重点排查以下几点: 1)检查代码中是否有死循环或递归调用。 2)检查是否有大循环重复产生新对象实体。 3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记 录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容 易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库
查询尽量采用分页的方式查询。 4 )检查 List、MAP 等集合对象是否有使用完后,未清除的问题。List、MAP 等集合对象会 始终存有对对象的引用,使得这些对象不能被 GC 回收。 案例: 1.hibernate 查询数据时,一次查询过多的数据,后来调整了该部分的代码,每次只取出指定 量的数据,成功的解决该
问题。 2.在做压力测试时,出现 OutOfMemoryError,发现 session 的资源一直没有被释放产生的, 最好通过 session 的 invalidate()方法将 session 的资源释放。 3.程序中出现死循环。 4.tomcat 部署、运行出现 OutOfMemoryError,加大内存参数值,解决此问题。
1/3
tomcat 中 java.lang.OutOfMemoryError:
Java heap space 异常处理 一、Heap size 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 修改 TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m" tomcat
中 java.lang.OutOfMemoryError: PermGen space 异常处理 一、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 大小 修改 TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 建议:将相同的第三方 jar 文件移置到 tomcat/s