这几天在做一项工作,就是把一些网站放到一台服务器上。周五已经放了三个,昨天又加了两个。结果昨天晚上就出了问题,是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不是解决这个问题的,而是解决另一种内存溢出的。只是它们一般结合使用,所以就都加上了。
加上这句代码,再重启服务,就不会像没加时那样每隔十来分钟就溢出一次了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步