这几天在做一项工作,就是把一些网站放到一台服务器上。周五已经放了三个,昨天又加了两个。结果昨天晚上就出了问题,是java.lang.OutofMemoryError: PermGen space. 上网查了查,都说是因为“永久保存区域溢出”。PermGen space全称是Permanent Generation Space。这一部分用于存放class和meta信息,class在被load的时候被加入到这一区域。PermGen space默认大小只有4M, 而Garbage Collection不会在主程序运行期间对PermGen space进行清理,所以如果web应用会load很多class时,就会出现这个问题。一般使用了Spring和Hibernate框架的web应用,引入了大量第三方的jar包,更容易出现这个问题。 解决方法: 在$CATALINA_HOME/bin/catalina.sh中,添加一句 1 JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512m" 这句代码中间的-Xms512m -Xmx1024m不是解决这个问题的,而是解决另一种内存溢出的。只是它们一般结合使用,所以就都加上了。 加上这句代码,再重启服务,就不会像没加时那样每隔十来分钟就溢出一次了。 (责任编辑:IT) |