问题描述
服务器在运行一段时间后(两三天),内存不断上升(可到900M),经常出现java.lang.OutOfMemoryError: PermGen space的错误,导致tomcat死机,外部不能找开网站.
目前,web服务和数据库服务是分开的,web服务器是2005年9月才升级的,
内存2G,内存泄漏基本可以确定为Web服务器软件环境引起的.
Web服务器的软件环境如下:
操作系统:Win2000 server
Web服务:tomcat5.5
Jdk版本:jdk1.5
网站开发先后经历了三次大的调整,开发环境从最初的jdk1.4,tomcat4.0
升级到了现在的jdk1.5,tomcat5.5, 技术上也由当初的javabean+jsp,增加了struts,sql mapping,jstl,displaytag,另外,后台还同时运行了多个进程,以实现邮件的订阅,测评刷新,职位刷新,RSS刷新等功能
解决方案
鉴于以上情况,我通过以下步骤来排除内存泄漏的问题:
1. 根据近段时间的日志文件,发现有些情况下,死机前后,都是有后台线程启动,如”职位刷新””RSS刷新”,所以我准备先停止后台线程的自动运行,改成手动启动,以测试是否因为后台线程自动运行引起的干扰.
2. 错误java.lang.OutOfMemoryError: PermGen space,倒底是不是因为对象内存占用过多,没有被虚拟机JVM回收的原因引起,这点我一直有疑问.
查了一下PermGen space,全称是Permanent Generation space,就是说是永久保存的区域,用于存放
Class和Meta信息,Class在被Load的时候被放入该区域,从字面看,和存放Instance的Heap区域不同,GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误.
所以我怀疑是我们源代码是使用了太多的静态static对象/方法/属性 所引起的,因为静态的对象/方法/属性是和类关联的,不被虚拟机JVM回收.正像上面说的, 如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误.,会不会太多的静态的对象/方法/属性会引起这个错误呢?
这点是我自己的理解,如果要验证,需要改写所有的静态的对象/方法/属性,这个工作量是巨大的(如果万一不是?),所以为了减小风险,我准备改写最常用的类(如查职位,文章显示)为非静态方法,如果能有一些效果(如死机的频率减少),再作进一步修改.
3. 更换tomcat版本,排除tomcat旧版本bug引起的内存泄漏问题.
以下是一个blog上发现的,和我们的问题比较类似.
Tomcat 5.5.4有内存泄漏的问题,当我重新发布一个应用几次之后,Outofmemory:PermGen space,到apache的网站上找,说是5.5.8会修补这个问题。所以还是不要重新发布了,直接重起得了:)
4. 使用工具Jprofiler,实时监控服务器运行情况,当发现死机时,查看其内存使用情况,类和对象占用的内存大小等…
Jprofiler可以监控内存堆栈的分配和使用情况、对象建立的多少情况、cpu使用的情况,还可以针对每个类或每个对象或每个线程、或每个函数对内存、cpu的使用情况,还可以看java虚拟机中自动垃圾收集的运行情况
5. 使用测试工具loadrunner,加大负载,模拟并发的大访问量.
周末两天,服务器没有死,但内存已到了860M之多....
周一上午来上班的时候,就死了,还是java.lang.OutOfMemoryError: PermGen space的错误,
晕,...........
分享到:
相关推荐
InstallAnyWhere J2EE集成Tomcat6.0+MySql5.1+JDK1.5
jdk5.5+tomcat5.5 环境配置
ACPCHE+RESIN+JDK1.5架设WEB服务器.pdf
struts2+spring2+hibernate3集成示例 (开发环境:myeclipse5.5+tomcat6+jdk1.6) 描述:一个集成的登录小例子,供大家参考...
ireport5.5+jdk6
centsos6.5+jdk1.7+mysql5.5+tomcat7+nginx1.7安装手册
cxf+spring+jdk1.5开发webService部署weblogic9.2
SMART系统-系统框架设计与开发SQL Server 2000 + Eclipse3.1.2 + JDK1.5 + Apache Tomcat5.5.15
资源包括 tomcat7+jdk1.7+redis session共享; tomcat8+jdk1.8+redis session共享; jar包+配置文件都有
自己做的jsp书店,绝非网上download。 开发工具:JBuilder 2005 + JDK 1.5 Dreamweaver8
tomcat8和jdk1.8linux版、windows版
tomcat+mysql+jdk脚本安装
linux安装配置jdk1.5、tomcat5.5、eclipse3.2详解
JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb...
有关的配置,有图解的,如果不会,可以按照文档进行安装
jdk-1_5_0_22-windows64 操作系统 和 tomcat5.5windows64 操作系统下载x
适用于windows 64位的javaSe 1.5版本,内含jdk1.5_0_17 + jre1.5_0_17的exe安装程序; 如果有装360安全卫士的机子,在安装时如有出现阻止弹窗,请选择允许,否则会安装失败
tomcat+jdk 配置测试方便初学者学习部署
tomcat5.5与jdk1.4兼容包
linux安装配置jdk1.5、tomcat5.5、eclipse3.2、Myeclipse5.1详解.doc