前段时间对某个企业应用网站进行了一次优化分析,解决这个网站经常死机和CPU高负载的种种问题,根据我接触的一些应用和服务器配置,我对这个案例总结了一些优化方案,用来解决网站的高负载和高并发等问题,这里我和大家分享一下这个案例,希望能和大家一起探讨一下这种解决方案的优劣。
一、网站当前状况和性能现状
系统硬件配置:CPU为两个Intel Xeon 2.4G,物理内存为2.5G.
系统软件配置:操作系统为Windows Server 2003标准版,数据库为SQL Server 2000.
服务器访问量:工作日:访问人数 10000,浏览量 30000 ,休息日:访问人数 4000,浏览量 10000,每用户访问页面为2.88页面,平均停留时间为3分钟。由于存在大型下载文件,服务器流量每天有80G到160G左右。
WEB系统:采用Tomcat服务器,使用Struts和Hibernate.
网站系统:网站有几套不同的系统,有新闻发布CMS系统、文件下载系统、反馈系统等等,使用基于Java的Struts和Hibernate的MVC架构,动态应用。
服务器CPU目前通常为40%左右,很多情况能增加到80-90%.
二、网站性能分析
通常情况下CPU达到80%说明系统性能存在瓶颈,需要找出系统的瓶颈究竟在哪里。
分析过程是,远程登录服务器,打开SQL Server 2000的事件探查器,记录和分析SQL语句,同时打开任务管理器,查看各个进程占用CPU的状况。
经过查询,SQLServer占用较大的CPU,说明系统调用CPU查询较多,初步可以确认是数据库引起的系统瓶颈,由于使用Struts和Hibernate应用,调用数据库频繁,因此可以采用减少SQL查询的方式降低对SQLServer的调用,通常情况下有两种方法:Cache或静态化。
另外,服务器的Web系统采用的架构存在一些问题,因为存在大型下载文件,占用的流量非常大,而Tomcat本身对于静态文件的处理性能并不好,也会对系统性能产生负面的影响。
三、网站和服务器优化方案
1、缓存
将页面静态化是通常的优化方案,但是对于当前的Tomcat服务器下的Struts和Hibernate未必有效,因为Tomcat对于静态HTML文件本身支持并不理想,并且新闻内容更新较为频繁。因此,在现有架构的基础上,可以使用hibernate的ehcached的动态缓存的方式,在动态应用中减少数据库负载,提升访问速度。
使用ehcache对访问频率高,对数据库消耗大的页面进行动态缓存(时间10分钟),在缓存的时间范围内这些页面直接重缓存中读取,无需访问数据库,提高这些页面的访问速度,减小数据库访问的压力。这样SQL Server数据库的负载会大为降低。
2、静态化
对于一般的网站来说,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。因此,从长远考虑,需要对当前网站的架构进行一番调整,以适应静态化页面的需求。
首先,由于Tomcat对于静态页面支持不太好,也不支持URL 重写,因此需要安装Apache服务器。
其次,由于Struts对于搜索引擎不友好,因此将其全部转换为静态HTML页面,即可降低对数据库的查询次数,也可提高对搜索引擎的友好度。因此需要使用HTML静态化的方式优化服务器端的WEB程序。
具体实施方案是,将现有Tomcat配置为8080端口,安装Apache服务器,配置为80端口,在Apache中修改httpd.conf文件,使得Tomcat解析JSP文件,静态HTML文件、图片文件、大型下载文件使用性能更好的Apache支持。
修改Apache的.haccess文件,将Struts应用重写为静态Html文件形式,修改相关代码,使得其能自动生成静态HTML文件。
优化访问量最多的页面,首页index.jsp为目前访问量最多的页面,里面的动态代码删除,将这个页面转化为静态的html页面index.html.
3、应用部署
如果资金允许的话,可以将数据库SQL Server 2000升级为SQLServer 2005,并单独部署到另外一台独立服务器上,文件下载也单独部署一台服务器。
由于Tomcat本身的局限性,一个Tomcat的资源无法无限利用服务器的所有资源,并且Tomcat需要响应的请求太多,势必影响到整体的性能,因此配置多服务器可以使得Web网站的负载大幅降低,从而提高整体的响应能力。
不过这种部署的缺点是需要付出升级软件、购买服务器、托管带宽等成本开销,建议不到万不得已,可以不用付出额外的资金升级。
以上就是我针对某企业应用网站进行分析和优化的具体步骤和方案,希望能起到抛砖引玉的作用,供大家参考。
分享到:
相关推荐
在C++编程中,应用程序性能优化是一个至关重要的领域,它涉及到如何提高代码的运行效率,减少资源消耗,以及提升整体的用户体验。以下是一些从标题和描述中推断出的关键知识点,以及从压缩包文件名可能涉及的内容: ...
大型项目中,MySQL数据库性能优化是保证业务流畅、数据安全、系统稳定的重要手段。本文针对一个拥有两亿注册用户的大型移动项目,从MySQL体系架构、设计优化、系统优化、配置优化和语句优化五个方面进行详细解析。 ...
Oracle应用产品的性能调整是一项复杂而重要的任务,旨在优化系统的运行效率,提高用户满意度。本教程主要涵盖以下几个核心知识点: 1. **应用产品性能调整概要**:首先,我们需要明确问题的定义,包括问题的特性...
《机械最优化设计及应用实例》是一本深入探讨机械设计领域优化技术的教材,它针对实际工程问题提供了丰富的实例分析,旨在帮助读者理解和掌握如何在机械设计中运用优化方法提高性能、降低成本。优化设计是现代工程...
数据库层优化主要包括两个方面:实例性能优化和SQL语句性能优化。实例优化涉及内存配置、后台进程调整和初始化参数设置,以确保数据的高效读写和处理。SQL优化则侧重于通过分析SQL执行计划,识别慢查询并应用索引、...
内容概要:本文档全面介绍了基于阿里云ECS倚天实例的应用构建与性能优化的最佳实践。内容涵盖了倚天CPU架构特性、编程语言适配、多架构应用部署、大数据加速等多个维度的内容。通过对倚天710芯片的特点和技术特性的...
总之,《面向异构融合处理器的性能分析、优化及应用综述》这篇论文全面总结了当前异构融合处理器的研究现状,分析了性能优化的关键技术和应用实例,并对未来的研发趋势进行了预测,为相关领域的研究者和开发者提供了...
GPGPU 性能模型及应用实例分析 GPGPU(General-Purpose Computing on Graphics Processing Units,通用图形处理单元)是一种将图形处理单元(GPU)用于通用计算的技术。随着GPU的计算能力和并行处理能力的提高,...
本文通过介绍性能优化的方法、SQL语句优化的原理与途径,并结合实际案例分析,为数据库应用系统的性能优化提供了系统的理论指导和实践参考,对数据库系统开发人员和维护人员具有重要的参考价值。
《Java程序性能优化》这本书主要探讨了如何通过各种技术和策略来提高Java应用程序的性能。 ### 性能瓶颈分析 - **CPU使用率高**:程序执行时,某些部分可能过度消耗CPU资源,导致性能下降。 - **内存泄漏**:对象...
本实例分析了一份大型移动项目的MySQL数据库性能优化过程,提供了深入的技术细节和方法。 首先,MySQL体系架构的优化是确保数据库高性能的基础。体系架构的优化涵盖了存储引擎的选择。不同的存储引擎有着不同的特性...
**EVC应用程序实例分析** EVC,全称Embedded Visual C++,是微软为Windows CE平台开发的一款集成开发环境。这个应用程序实例分析主要针对的是使用EVC进行开发的过程,旨在帮助开发者理解和掌握EVC的特性和实际应用...
本篇文章将深入探讨Android应用性能优化的关键点,从理解性能优化的基本原则,到具体的实践技巧,帮助开发者构建更加高效的应用。 #### 高效编码的两大准则 1. **避免不必要的工作**:编写代码时应确保每一行代码...
在IT领域,Oracle数据库作为企业级数据管理的首选方案,其性能优化至关重要。本文旨在深入探讨Oracle数据库性能优化的最佳实践,包括数据库性能基础、调优方法论、SQL语句调优以及Oracle性能优化解决方案,帮助...
第2篇为MATLAB高级算法应用设计,包括人脸检测识别、改进的多算子融合图像识别系统设计、罚函数的粒子群算法的函数寻优、车载自组织网络中路边性能及防碰撞算法研究、免疫算法的数值逼近优化分析、启发式算法的函数...
数据库性能优化是IT领域中的一个核心议题,尤其对于处理大量数据的企业级应用而言,高效的数据库性能至关重要。在SQL Server、MySQL和Oracle这三大主流数据库系统中,优化策略各有其特点和技巧。以下将针对这些...
第1篇 日常应用 第1章 安装和卸载 第2章 数据库管理 第3章 数据库实例管理 ... 第17章 常用性能监测、分析和优化工具 第18章 对SQL语句进行分析和优化 第19章 索引和提示优化 第20章 数据库分区技术