月光疾风

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这几天在做一项工作,就是把一些网站放到一台服务器上。周五已经放了三个,昨天又加了两个。结果昨天晚上就出了问题,是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不是解决这个问题的,而是解决另一种内存溢出的。只是它们一般结合使用,所以就都加上了。

加上这句代码,再重启服务,就不会像没加时那样每隔十来分钟就溢出一次了。

posted on 2010-09-14 09:27  月光疾风  阅读(8991)  评论(1编辑  收藏  举报