转载时请务必以超链接形式标明文章 原始出处和作者信息及本版权声明。
链接:http://www.dbasky.net/archives/2009/01/tomcatoutofmemoryerror-permgen-space.html
服务器8G内存,java最大可用3072M内存。访问量就PV来说在100多万.
这样的情况下居然出了几次 out of memory。
java.lang.OutOfMemoryError: PermGen space
永久空间内存不足 java.lang.OutOfMemoryError: PermGen space,相比不少使用spring,hibernate等一堆jar包的人都遇到过这个问题,在tomcat reload一个Context多次后,tomcat就挂掉了。
PermGen space这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
这个问题据说有人03年就当作bug提交给了sun,但是sun一直到现在都没解决,这也成了业界的一个小笑话。
解决这个问题,有两个办法,一是不用sun的jdk,二是在tomcat的catalina.sh中添加参数,增大PermGen space区域的大小
JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m"
增加后是这个样子的
JAVA_OPTS="-server -Xms512m -Xmx2520m -XX:PermSize=64M -XX:MaxPermSize=128m"
修改后重启下tomcate.测试中。。。。。
发表评论