问题描述
服务器在运行一段时间后(两三天),内存不断上升(可到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的错误,
晕,...........
分享到:
相关推荐
目前,最新的 jdk 版本为 1.5,tomcat 版本为 5.5。建议使用 jdk1.4 以上,tomcat4.0 以上的版本。 下载完成后,执行安装程序,并按照路径进行安装。 二、配置 jdk 环境变量 安装 jdk 完成后,需要配置环境变量。...
【InstallAnyWhere J2EE集成】是一个自动化安装过程,它涉及了三个关键组件:Tomcat6.0,MySql5.1,以及JDK1.5。这些组件都是Java相关技术的重要部分,对于构建和部署Java企业级应用程序至关重要。 1. **Tomcat6.0*...
ireport5.5+jdk6
标题"jdk1.5 and tomcat5.5"指的是Java Development Kit (JDK) 1.5版本与Apache Tomcat 5.5版本的组合。这两个组件是开发和运行Java应用程序的关键工具,特别是对于Web应用程序。 描述中提到的"jdk-1_5_0_22-...
【标题】"Tomcat8+jdk1.8.zip"是一个包含Tomcat 8服务器和Java Development Kit (JDK) 1.8版本的压缩包,适用于Linux和Windows操作系统。这个组合是开发和运行Java Web应用程序的常用环境配置。 【描述】提及的...
【标题】"Tomcat 8.5.20与JDK 1.7、1.8及1.6的兼容性解析" 在IT行业中,Tomcat作为一款广泛应用的开源Java Servlet容器,对于Java Web应用程序的部署和运行起着至关重要的作用。本篇将详细讨论Tomcat 8.5.20版本与...
标题中的"tomcat6.0.48+jdk1.7或jdk1.8或jdk1.6"指的是一个配置环境,其中Tomcat是Apache软件基金会的一个开源Java Servlet容器,版本为6.0.48,它主要用于部署和运行Java Web应用程序。而JDK(Java Development Kit...
在Tomcat 5.5与JDK 1.4的兼容性方面,需要注意的是,虽然它们可以一起工作,但随着技术的发展,JDK的更新版本(如JDK 1.5及以上)通常会提供更好的性能和安全性。因此,对于新的项目或者需要长期维护的系统,推荐...
### JSP环境搭建指南:Eclipse3.2 + MyEclipse5.5 + Tomcat5.5 在本文中,我们将详细介绍如何搭建一个基于Eclipse3.2、MyEclipse5.5和Tomcat5.5的Java Server Pages (JSP) 开发环境。这个组合在早期的Web开发中非常...
这里提到的"uts1.2+JNDI+JDK1.5+MySql"是一个项目,利用了SSH框架以及JNDI(Java Naming and Directory Interface)、JDK 1.5版本和MySQL数据库。下面我们将详细讨论这些知识点。 1. **Struts 1.2**: Struts是...
在IT行业中,构建一个基于Java的Web应用环境通常涉及到三个核心组件:JDK(Java Development Kit)、MySQL(一种关系型数据库管理系统)以及Tomcat(一个流行的Java应用服务器)。标题和描述提到的“tomcat+mysql+...
`jdk1.5和tomcat5.5免安装的环境配置.txt`文件很可能是详细记录了配置过程的文字说明,包括JDK和Tomcat的安装、环境变量设置、防火墙端口开放等细节。建议按照这个文件的指示操作,确保每一步都正确无误。 需要注意...
JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb网络爬虫(蜘蛛)源码(servlet+jsp+mysql+tomcat+eclipse+jdk) JavaWeb...
默认情况下,Tomcat会在每个实例的内存中存储session数据,这意味着当用户在集群中的一个节点上登录后,如果请求被转发到另一个节点,该节点将无法访问到原始session信息,导致用户需要重新登录。为了解决这个问题,...
Java开发和部署环境的搭建是每个Java开发者必备的技能之一,本压缩包包含了"jdk1.5"、"tomcat6"以及"jdk1.6"、"tomcat7"等关键组件,适用于那些需要在较低版本环境中运行或测试应用程序的用户。下面将详细介绍这些...
【IIS6.0与Tomcat5.5+SQL2000整合方案】 整合IIS6.0(Internet Information Services 6.0)与Tomcat5.5和SQL2000是将Windows服务器上的静态内容处理能力与Java应用程序服务器的动态功能相结合的过程。这种集成允许...
标题 "nginx+tomcat7+jdk1.7+redis--jar.rar" 提示我们这是一个关于在Web服务器架构中集成Nginx、Tomcat7、Java 1.7和Redis的解决方案,特别是涉及到使用Redis作为Session缓存的配置。描述中强调了在下载和使用这些...
### CentOS 6.5 + JDK 1.7 + MySQL 5.5 + Tomcat 7 + Nginx 1.7 安装手册 #### 一、JDK 1.7 安装 ##### 1.1 下载JDK 1.7 - 访问Oracle官方下载页面:...
总结,本文详细介绍了在Linux系统中安装JDK1.5、Tomcat5.5和Eclipse3.2的全过程,包括软件下载、安装、配置环境变量以及使用插件优化开发环境。即使对Linux不熟悉的新手,也能按照这个指南顺利完成Java开发环境的...