tomcat内存不足的解决方法

tomcat永久空间内存不足的解决:
最近两天配置tomcat与apache的结合,不知道什么原因在项目启动运行很短暂的时间以后就会报permgen space异常。可是在自己本地缺没有见过这种现象。
我们开始以为是自己代码写的有问题才会有这种现象的出现。但是经过测试排除了这种可能性。
最终还是在网上找到了答案。
PermGen space这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)
不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。
然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。
还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。
SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。
本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。
而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,
解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,
它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,
所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

猜你喜欢

转载自dakuishache.iteye.com/blog/969200