报错类型:OutOfMemoryError(内存溢出)
报错信息
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
6.weblogic:java.lang.OutOfMemoryError: getNewTla
故障解决:
1.在Tomcat的/bin/catalina.sh文件 echo "Using CATALINA_BASE: $CATALINA_BASE" 的上面加入
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
2.在Tomcat的/bin/catalina.sh文件最上面添加:
JAVA_OPTS='-Xms256m -Xmx512m'
6.在受管的服务器启动参数中添加:
-XXtlaSize:min=128k,preferred=512k,wasteLimit=128k
Java代码导致OutOfMemoryError错误的解决:
需要重点排查以下几点:
检查代码中是否有死循环或递归调用。
检查是否有大循环重复产生新对象实体。
检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。