(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf_第1页
(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf_第2页
(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf_第3页
(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf_第4页
(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

(计算机软件与理论专业论文)web系统性能优化辅助方法的研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

捅要 摘要 2 0 世纪9 0 年代以来,伴随着i t e m e t 时代的到来,基于b s 模式的w 曲系 统,凭借其较低的硬件需求、较短的开发周期、良好的可扩展性和可维护性, 逐渐成为当前企业信息系统的主流结构。 在w 曲系统被广泛应用的同时,也暴露出一些不可忽视的问题,其中一点 是不少系统的响应时间不能满足客户的需求;还有的系统在并发访问的规模扩 大时,响应时间会陡然增加,甚至拒绝服务。 目前,基于j 2 e e 的w 曲系统在企业级解决方案中处于主导地位,影响基于 j 2 e e 的w 曲系统性能的因素是多方面的,包括:硬件( 计算机和网络) 、操作 系统、j a v a 虚拟机、数据库管理系统、数据库实例、j 2 e e 服务器、j 2 e e 应用程 序等方面。 本文将结合w 曲系统性能优化过程模型和w 曲系统性能优化计算机辅助解 决方案,针对基于j 2 e e 框架w 曲系统中的代码性能优化问题,重点阐述w 曲系 统性能优化辅助系统( w p t ) 的设计与实现。 关键词w 曲系统;性能优化:面向方面编程:反模式识别 a b 咖c t a - b s t r a c t s i n c e 也e9 0 t ho ft h e2 0c e 卿,b yr i g h to f “s1 0 wd e m a l l df o rh a r d w a r e ,s h o r t d e v e l o p m e n tc y c l e ,w e l le x p a n s i b i l 时a 1 1 dm 咖t a i n a b i l 咄m eb sm o d e lb 懿e dw e b s y s t e mb e c o m e sm a i n s 订e 锄s t m c t u r eo fm ec u n i e n te n t e r p r i s ei n f o m l a t i o ns y s t e m 掣a d u a l l y t h ew | e bs y s t e mb e c o m e sv e r yp o p u l a r ,a tt h es a m e 斑n e ,i te m e r g e ss o m e p r o b l e m st l l a tc a nn o tb ei 掣l o r e d s u c ha st h er e s p o n s et i m eo far e s p e c 诅b l e 锄o u n t o fs y s t e mc a l l n o ts a t i s 母也ed e m a n do f u s e r ;a 1 s o t h er e s p o n s e t i m eo f s o m es y s t e m s 谢1 li n c r e a s es u d d e n l y e v e nc a u s ed e n i a lo fs e i c ew h e ne x t e n d e ds u b s e q u e m a c c e s s e so c c u c u r 彻l n y t 1 1 ej 2 e eb a 9 e dw e bs y s t e mi so nt 1 1 el e a d i i l gs t a t l l smm ee n t e r p r i s e s 0 1 埘0 1 1 s n e r ea r ev 撕0 1 l s 曲p a c t sf o rp e 渤r i n a n c eo f 也ej 2 e eb a s e dw e bs y s t e m , g u c h 鹤h a r d w a r e ( 也ec o m p m e ra n dn e t 、o r k ) ,o p e r a t i n gs y s t e m ,j a v av i r n l a 王m a c 址, d a 诅b 鹊ei n a n a g e m e n ts y s t e m ,d 撕b a s ei n s t 趿c e ,j 2 髓s e e ra 1 1 dj 2 髓a p p l i c a t i o n e t c t h i sp a p e rw i l l 越s o c i a t et b ep r o c e s sm o d e lo fw 曲s y s t e mp e r f b 衄a n c et u i n g a n dt h ec o m p u t e ra s s i s t a n ts o l 砸o no fw 曲s y s t e mp e r f b n n a n c et u n j n g ,a n da i l na t c o d ep e 哟m a l l c et 1 1 芏l i n go f 血ej 2 e e 丘锄e w o r kb a s e dw e bs y s t e n l m i r d ye x p a t i a t e 也ed e s i g na n di i n p l 锄e n t a t i o no fw 如s y s t c l mp e r f o r m a n c en 工n i i l gs u p p o n i n gs y s t e m ( w p d k e y w o r d sw e bs y s t e m ;p e r f o 珊a i l c e 衄咖g ;a s p e c t - 0 r i e n t e dp r o f a m i l l i n g ; a m i - p 甜e mr _ c c o g n i z i i l g i i i 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究t 作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也4 i 包含为获得北京t 业大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 签名:型客日期:越五。5 n 关于论文使用授权的说明 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的论文在解密后赢遵守此规定) 勰卑新张塑卑蝴叫 第l 宣绪论 1 1 课题背景 第1 章绪论 1 1 1w e b 系统成为企业信息系统的主流结构 2 0 世纪9 0 年代咀来,伴随着i i i c e m e t 时代的到来,基于c s ( c l i e 州s m w , 客户机朋务器) 结构的“n 系统已经无法满足当前的全球网络开放、互联、信 息共享的新需求;进而,基于b s ( b r o w s 刮s e r v e r ,浏览器服务器) 模式的w e b 系统,凭借其较低的硬件需求、较短的开发周期、良好的可扩展性和可维护性, 逐渐成为当前企业信息系统的主流结构【1 1 。 1 1 2 性能优化是w 曲系统亟待解决的问题 在w 曲系统被广泛应用的同时,也暴露出一些不可忽视的问题,其中一点是 不少系统的响应时间不能满足客户的需求;还有的系统在并发访问的规模扩大 时,响应时间会陡然增加,甚至拒绝服务口1 。w 曲系统的性能不佳所带来的代价 通常是惨痛的,如影响企业形象、削弱企业竞争力、客户流失、削减市场份额等。 然而,造成w 曲系统性能瓶颈的原因却非常复杂,既有系统平台自身潜在的缺 陷,也有开发人员的技术和系统外部运行环境的影响哪。 因此,如何有效地对w 曲系统性能进行优化,是w 曲系统亟待解决的问题。 1 2 、e b 系统性能优化现状分析 1 2 1w e b 系统性能的衡量指标 w 曲系统的性能状况,是通过w 曲系统的性能指标来衡量的。通常,w 曲 系统性能的衡量指标,包括如下几个方面州: ( 1 ) 吞吐率 每一秒钟系统所能正确处理的用户操作总数。单位是u 0 p s ( u s e ro 口e r 撕o n p e r s e c o n d ) ,该性能指标反映了系统用户级的事务处理能力。 p e r s e c o n d ) ,该性能指标反映了系统用户级的事务处理能力。 北京工业大学工学硕士学位论文 根据每一时刻所测量得到的吞吐率形成一个吞吐率和时间的曲线图,从中直 接观察和分析出最大吞吐率、峰值吞吐率、平均吞吐率和系统利用率等统计数据。 ( 2 ) 响应时间 从用户的角度来看,执行一次用户操作所需要的时间。单位是u o r t ( u s c r o p e r a t i o nr e s p o l l s et i m e ) ,可以表示为: u o r t = t 2 t i 其中,t l 是用户操作开始的时间值,t 2 是用户操作结束的时间值( t l 和t 2 都是在用户端测量的时间值) 。 ( 3 ) 用户操作平均复杂度 在任何w 曲系统中,存在着多种类型的用户操作。且各类用户操作的复杂度 是不同的。但用户真正关心的并不是某一类用户操作的复杂度,而是用户操作的 平均复杂度。 设有n 个用户操作类型,每类用户操作的平均响应时间分别为u o r t l , u 0 r t 2 ,u 0 r t 。,相对应的出现概率分别为p l ,p 2 ,p 。,则用户操作的 平均复杂度为响应时间的加权平均值。郎: 用户操作的平均复杂度= ( u o r t ,x p 。) f ;l ( 4 ) 并发用户数 同时连接到系统的用户中,系统能够正确及时地服务的用户数。并发用户数 的最大值反映了系统同时所能服务的用户数的最大值。 注:一次用户操作指的是用户( 或模拟用户) 对浏览器( 或模拟浏览器) 发 出某个指令,浏览器解释这个指令,并向w 曲系统发出一个或多个请求,w 曲 系统接收处理这些请求后,把对这些请求的最终处理结果全部返回给用户的过 程。 1 2 2w e b 系统的应用框架 目前,基于j 2 e e 的w 曲系统在企业级解决方案中处于主导地位眦。本文将 以基于j 2 e e 的w e b 系统( 以下简称为w 小系统) 为主要研究对象。下面,本 文对j 2 e e 的框架模型进行简要的介绍。 第l 章绪论 j 2 e e 是s u n 公司于1 9 9 9 年推出的企业应用框架标准,它利用j a v a 2 平台来 简化企业应用解决方案的开发和部署及管理相关的复杂问题,提供了一个企业级 的计算模型和运行环境,用来开发和部署多层体系的应用f 6 】。如图1 i 所示,汜e e 平台借助个分层框架模型和一系列相关技术来支持w 曲系统的开发与部署。 c l i e n t l l e r ih 硼d k l i e r l 臼哼1 1 e r iw t wb u 嘶n 储 l 纠i t a m b 时 网 l i 崆p i l - - 一 x 卜 u l 一 o 1 一 】e l 制捌棚制捌堋 i 扣 a p k 啦ii ,一l j 2 s e a l “h 憎- r _ l t t 。 i 咤挈i l i l 一! ! 孵,f 瞒 州瞳 i li - e 】b s n 肘m - - w 曲s 日w d i - ” i ( p 最;蔷蜀谲w 罱n e ) : a ;t tm a d i n e】掘s e m h 础i i 咖;襞 圈l lj 2 e e 体系结构 f i g u 冲l - 1j 2 e e a r c h i t e c t 1 n 1 2 3 影响w e b 系统性能的因素 ( 1 ) 硬件( 计算机和网络) 包括w 曲系统中的各种物理设备。对w 曲系统性 能造成影响的因素,包括c p u 、内存、磁盘、总线、网络带宽、网络拓扑结构 等方面吼 ( 2 ) 操作系统负责对计算机硬件进行直接控制和管理。通过对操作系统进行 适当的配置,能够尽可能接近系统硬件的性能上限【8 】。 ( 3 ) j a v a 虚拟机j a v a 虚拟机是j a v a2 平台的核心,负责读入j a v a 类文件并执 行类文件中的字节码,实现了j a v a 语言的平台无关性。j a v a 虚拟机的参数配置 北京工业太学工学硕士学位论文 能够对w 曲系统的性能造成影响,包括初始堆尺寸与最大堆尺寸、垃圾回收选 项、线程选项等o 】。 ( 4 ) 数据库管理系统为w 曲系统提供数据的存储和组织服务。数据库管理系 统的参数配置能够对w 曲系统的性能造成影响,包括线程模型、监听器池、索 引、表结构、查询优化选项等【1 0 】。 ( 5 ) 数据库实例是w 曲系统主要的数据形式,存储在数据库管理系统中。数 据库设计的优劣能够对w 曲系统的性能造成影响】。 ( 6 ) j 2 e e 服务器以容器的形式为j 2 e e 组件提供底层服务,包括w 曲服务器 和e j b 服务器( 又称应用服务器) 两类。j 2 e e 服务器的参数配置能够对w 曲系 统的性能造成影响,包括数据库连接池大小、线程池大小、使用s l s b ( s 诅t e l e s s s e s s i o n b e a n ,无状态s e s s i o n b e a n ) 时的实例池大小、使用s l s b 时的事物描述 符、h t t ps e s s i o n 复制选项、j t a ( j a v at r a n s a c t i o n a p i ,j a v a 事务a p i ) 选项、 l o g 设置等”。 ( 7 ) j 2 e e 应用程序指实现w 曲系统的程序代码,一般采用页面表示、业务 逻辑、数据库访问的三层结构。各个层次代码质量的优劣均能够对w 如系统的 性能造成影响f 1 “。 1 2 4w e b 系统性能优化过程模型 当前,解决w 曲系统的性能问题存在两个误区: ( 1 ) 开发人员不对系统进行性能优化就部署系统,在用户使用过程中出现性 能问题后再进行补救; ( 2 ) 开发人员一向认为能够通过升级硬件来解决性能问题。 实践证明,上述观点都是错误的。要解决w 曲系统的性能问题,必须通过系 统化的方法对w 曲系统进行性能优化。如图1 2 所示,w e b 系统的性能优化过 程模型,w 曲系统性能优化过程是系统发布之前必不可少的重要环节。 第1 章绪论 开始 图l - 2 性能优化过程模型 f 咖他1 2p e r f 0 珊姐t h i gp r o c e s sm o d e l w 曲系统性能优化过程模型,由如下四个步骤组成1 4 】: ( 1 ) 性能测试通过负载压力测试来采集w 曲系统的性能数据; ( 2 ) 瓶颈分析分析步骤( 1 ) 中采集的性能数据,分析w 如系统的性能瓶颈; ( 3 ) 性能优化针对步骤( 2 ) 中分析出的性能瓶颈,实施相应的性能优化方法; ( 4 ) 回归测试包括功能测试和性能测试两个方面: 功能测试验证在实施性能优化方法的过程中没有引入软件缺陷; 性能测试验证性能优化方法的实施效果。如果满足w 曲系统的性能目 标,则结束w 曲系统性能优化过程;反之,转向步骤( 1 ) ,重新开始新一轮的w 曲 系统性能优化过程。 1 3 本文研究内容 本文的研究内容,主要包括如下四个方面: ( 1 ) w 曲系统性能优化过程及计算机辅助解决方案 在对w e b 系统性能优化过程进行研究的基础上,提出支持w 曲系统性能优 化过程的计算机辅助解决方案。 ( 2 ) w 曲系统性能测试理论及计算机辅助解决方案 在对w 曲系统性能测试理论进行研究的基础上,提出支持w 曲系统性能数 据采集的计算机辅助解决方案。 北京工业大学工学硕士学位论文 ( 3 ) w 曲系统性能瓶颈分析 在对w 曲系统性能数据进行研究的基础上,分析w 如系统性能数据与w 曲 系统性能瓶颈之间的映射关系。 ( 4 ) w 曲系统性能优化方法及计算机辅助解决方案 在对w 曲系统性能优化方法进行研究的基础上,提出支持w 曲系统性能优 化的计算机辅助解决方案。 1 4 本文组织结构 第l 章,介绍课题背景、w 曲系统性能优化的现状分析,以及本文研究的主 要内容。 第2 章,阐述w 如系统性能优化理论的研究,将w 曲系统性能优化过程模 型中的各个步骤逐一展开,包括w 曲系统性能测试方法、w 如系统性能瓶颈分 析,以及w 曲系统性能优化方法。 第3 章,提出w 曲系统性能优化的计算机辅助框架,重点阐述了代码动态测 试技术和代码静态测试技术。 第4 章,阐述w 曲系统性能优化辅助系统( w p t ) 的研究。 第5 章,介绍w 曲系统性能优化辅助系统( w p t ) 在系统设计和实现中的 若干关键问题。 最后是结论,总结全文,展望有待继续研究的几个问题。 第2 章豫b 系统性能优化理论研究 2 1 引言 第2 章w e b 系统性能优化理论研究 本章旨在,详细阐述w 曲系统性能优化过程模型中凡个关键步骤所采用的方 法和技术,包括性能测试、瓶颈分析和性能优化。 2 2w e b 系统性能测试方法 为了解决w 曲系统性能测试存在的负载不可预知、测试场景设计困难、测试 环境和真实环境差异等方面的困难和问题,w 曲系统的性能测试一般采用模拟驱 动的自动负载测试方法:通过模拟真实负载、采集系统各部分的性能数据,为进 一步分析性能瓶颈、实施优化方法提供重要的依据。 该测试分为以下几个阶段i ”l :确定性能需求、制定测试计划、设计测试场景、 设置测试环境、开发测试脚本和运行测试场景。 2 2 1 确定性能需求 确定被测系统的并发用户数、响应时间以及运行环境等信息。 2 2 2 制定测试计划 根据性能需求制定测试计划,详细描述测试需求、测试目标、测试策略、测 试工具、测试进度和测试资源等,作为性能测试的活动指南。 2 2 3 设计测试场景 设计测试场景的关键是使其能代表被测系统在现实中的真实使用情况,通常 遵循以下几个原则: ( 1 ) 测试场景中用户操作类型的组合要反映真实情况; ( 2 ) 测试执行的速度应反映真实用户操作的速度; 北京工业大学工学硕士学位论文 ( 3 ) 对于每种用户操作都应该有真实的测试数据。 根据以上原则,本阶段可以分为以下三个步骤: 步骤一、确定要自动执行的用户操作组合,优先选择那些执行频率高、给j 2 e e 服务器和数据库服务器带来较重负载或风险代价大的用户操作。 步骤二、确定测试负载,通过模拟用户行为来模拟被测系统的真实佼用情况。 步骤三、定义每个用户操作的详细步骤,并为每个步骤确定输入数据,为开 发测试脚本阶段提供文档支持。 2 2 4 设置测试环境 安装和配置被测系统以及测试工具,创建一个虚拟的测试环境。有几点需要 注意: ( 1 ) 需要一个专门的测试环境、专门的网络; ( 2 ) 力求测试环境的硬件,如处理器速度、处理器数量、内存、磁盘、网络 配置等接近被测系统实际运行环境的硬件配置; ( 3 ) 测试系统数据库的数据量要与实际数据库一致。 2 2 5 开发测试脚本 测试脚本是测试场景的可执行形式。测试人员必须按照测试场景的设计文档 来开发测试脚本。本阶段可以分为以下三个步骤: 步骤一、使用负载压力测试工具自动生成初步的测试脚本; 步骤二、对测试脚本进行参数化以模拟大量不同的用户: 步骤三、调试、验证测试脚本,以解决多用户同时操作所带来的,如死锁、 数据冲突等问题。 2 2 6 运行测试场景 测试人员采用增量负载方式运行测试场景,能够精确地找到性能下降的转折 点。与此同时,使用各种性能测试工具采集性能数据,为测试人员分析性能瓶颈、 实施优化方法提供重要的依据。 - 8 第2 章w c b 系统性能优化理论研究 2 3w e b 系统性能瓶颈分析 w e b 系统的性能瓶颈涉及影响w e b 系统性能的各个因素,如图2 1 所示,一 个典型w 曲系统的性能瓶颈分布情况。在该w 曲系统中,客户机、j 2 e e 服务器 和数据库服务器位于不同的物理结点上m 】。 j 2 e e 服务器 客户机 j 2 e e 应用程序 数据库服务器 浏览嚣 j 2 e e 服务器数据库实例 j a v a 虚拟机 j a v a 虚拟机数据库管理系统 操作系统操作系统操作系统 计算机硬件计算机硬件 计算机硬件 $ ( 网络硬件 ( 图2 1w e b 系统的性能瓶颈分布 f i g l l r e 2 1w 曲s ”t 锄p e r f o r m a n c en k w 曲系统的性篚瓶颈分析是一个非常复杂的过程,需要将w 曲系统各个组成 部分的性能状况信息统计、汇总,进行综合分析,从而定位w 如系统的性能瓶 颈。 北京工业丈学工学硕士学位论文 2 4w e b 系统性能优化方法 w 曲系统的各个性能瓶颈所实施的性能优化方法各不相同。由于篇幅所限, 本文以j 2 e e 应用程序的性能优化为研究重点,并详述其性能优化方法。 j 2 e e 应用程序的性能优化是代码级性能优化方法。按照j 2 e e 应用程序一般 所采用的三层结构,划分为表示层性能优化、业务逻辑层性能优化和数据访问层 性能优化i ”j 。 2 4 1 表示层性能优化 表示层( p r e s e m a t i o nl a y e r ) 负责与用户进行交互,包括向用户显示信患并 把从用户那里获取的信息解释成业务逻辑层或数据访问层上的各种动作【1 8 1 。 表示层的代码主要由s e r v l e t 、j s p ( j a v as e e rp a g e ) 组件和j a v a s c r i p t 脚本 组成。因此,表示层的性能优化方法分为以下三类: ( 1 ) s e 1 e t 组件性能优化 避免使用s i n g l e n 鹏a d m o d e l 接口。 避免使用g e t r 加1 0 t e r h o s t 方法。 使用0 u t p u t s 仃e 锄方法代替p 血t 喇t e r 方法。 ( 2 ) j s p 组件性能优化 避免在j s p 页面中嵌入大量的j a v a 代码。 选择合适的h l c l u d e 机制。 当被包含的页面不经常改变时,建议使用1 1 1 c l u d e 指令方式,参考以下代码: 反之,建议只用i n c l u d e 行为方式,参考以下代码: ( 3 ) j a v a s c r 破脚本性能优化 尽量避免使用j a v a s c r i p t 脚本。 由于j a v a s c r i p t 脚本需要通过解释器解释执行,因而j a v a s c r i p t 脚本的执行速 度很慢。 使用j a v a s c r i p t 文件形式对j a v a s c 邱t 脚本进行封装。 由于浏览器能够将其存放到缓存中,从面减少下载次数。 使用s w i t c hc a s e 结构代替i f e l s e 也e n 结构;使用f o r 循环代替w h i l e 循环。 2 4 2 业务逻辑层性能优化 业务逻辑层( b u s i n e s sl o 西cl a y e r ) 负责业务处理,包括根据输入数据或已 有数据进行计算,对从表示层输入的数据进行验证,以及根据从表示层接收的命 令来确定调度哪些数据访问层逻辑m 】。业务逻辑层的性能优化方法,分为以下几 类: ( 1 ) 选择高版本的d k ( j 2 s ed e v e l o 舯1 e n t 鼬t ) 为了提高j 2 e e 应用程序的性能,s 吼公司一直从数据结构、算法等方面改 进j d k 原有的a p i ( a p p l i c a t i o np r o g r a i n m j n gh l t e r f k e ,应用程序编程接口) ,并 提供新的a p i 以方便程序开发。 ( 2 ) 选择合适的数据结构 选择合适的j d k 集合类 j d k 的集合类是实现j a v a 应用程序数据结构的基础。j a v a1 1 中的v e d i o r 、 s t a c k 、h a s h t a b l e 、e n 岫e r a t i o n 等集合类已被j a v a 2 中的新的功能更强大的集合 类所取代。 j d k 的集合类分为两类:一类是c 0 1 l e c t i o n 类,用于存放各自独立的对象, 包括l i s t 类和s e t 类,前者支持数据对象的有序存放,后者要求数据对象的无重 复存放。另一类是m 印类,用于存放具有“k e y v 甜u e ”的对象。以l i s t 、s e t 、m a p 为基础,又派生了一些新集合类,如a r r a y l i s t 、h a s h s e t 、h a s h m a p 等。 开发人员应该尽量使用l i s t 、s e t 、m a p 这些新集合类来代替h a s h t a b l e 、v e c t o r 、 北暮工业大掌工学碗士学位论文 s t a c k 等旧集合类: 对l i s t 类而言,a r r a y l i s t 类进行随机访问以及迭代访问的性能较好,但插入、 删除操作开销很大;而u n k l i s t 类的情况恰好相反。 对s e t 类而言,首选是h a s h s e t 类,一般不使用心t a y s e t 类。 对m 印类而言,首选是h a s a p 类,但由于t k e m 印类的创建速度最快, 若需要创建大量的m a p ,则创建t r e e m a p 类是较好的选择。待检索量增大时, 可将n e e m a p 类转换为h a s h m 印类。 使用s 廿i n g b u 脑类进行字符串处理 s t r i n g 类实例是只读且不可改变的,在使用s t r i n g 类实例进行字符串连接 ( “+ ) 操作是个复杂过程:首先创建一个s t r i n g b u f 精类实例,然后使用a p p e n d 方法进行字符串连接,最后使用t o s t r i n g 方法将s 曲培b u 脏r 类实例转换为s t r i n g 类实例。因此,直接使用s 血g b u 豌r 类进行字符串操作要比使用s 伍n g 类运行 性能要高的多。 尽量使用f m a l 类 f i n a l 类是不可派生类,该类的所有方法都是f m a l 方法。f m a l 方法是在编译 期使用内联方式而不是在运行期使用动态关联方式实现的,因而能够提升程序运 行性能。 ( 3 ) l 性能优化 尽量减少外存访问、方法调用。 选择支持缓冲的i 0 方式:用于字符输入的b 硼晒e d r e a d e r 类和用于字节 输入的b u 彘r e d i p u t s 仃e 锄类。 岫u t s t r e 锄类比r e a d e r 类具有较好性能,o u t p u t s t r e a i n 类比w 订t e r 类具 有较好性能。 尽量使用局部变量。 方法调用时传递的参数和调用中创建的临时变量都存放在栈中,存取速度较 快;其他变量,如静态变量、实例变量等都在难中创建,存取速度较慢。另外, 依赖于具体的j a v a 编译器虚拟机,局部变量还可能得到进一步的优化。 第2 章w c b 系统性能优化理论研究 2 4 3 数据访问层性能优化 数据访问层( d a t aa c c e s sl a y e r ) 负责与其他系统进行交互,通常是与数据 库进行数据存取操作【2 0 】。 数据访问层的代码主要由j d b c ( j a v ad 她出a s ec o 皿e c t i v 时,j a v a 数据库连 接) 编程、s q l ( s t r u c t 山eq 1 l 盯yl a n g u a g e ,结构化查询语言) 语句组成。数据 访问层的性能优化方法,分为以下两类: ( 1 ) j d b c 编程性能优化 建议使用数据源获取数据库连接,参考以下代码: 避免使用d r i v e r m a n a g e r 获取数据连接,因为d r i v e r m a i l a g e r 采用同步执行, 同一时间内只有一个线程可以运行,效率不高,参考以下代码: 使用p r c p a r e d s t a t e m e n t 类代替s t a t e m e n t 类 p r e p a r e d s 诅t 啪e n t 类支持使用不同参数进行重复执行,降低了j d b c 编译 s o l 语句的开销。 正确处理t r a l l s a c t i o n 与c o n l l e c t i o n 的结束顺序 t r a n s a c t i o n 比c o i u l e c t i o n 具有更高的优先权,如果t r a n s a c t i o n 没有结束,即 使关闭c o m l e c t i o n ,c o n n e c t i o n 也不会被放回c o l l e c t i o np o o i 。因此,正确地操 作顺序依次为:关闭r e s u l t s e t 、关闭s t a 钯m e n t 、提交回滚t r a n s a c t i o n 、关闭 c o n n e c t i o n 。 建议使用b l o b ( b i n a r yl 鲫驴o b j e c t ,二进制型大对象) 和c l o b ( c h a r a c t e rl a r g eo b j e c t ,字符型大对象) 类型来存储图像文件和文本文件,数 据库管理系统对这两种类型的处理进行了专门优化。 j d b c 从r e “t s e t 一次读取的行数缺省为3 2 行。建议针对大型r e s u l t s e t , 增大每次读取行数,减少读取次数,提供数据库处理的性能。参考以下代码,将 北京工业大学工学硕士学位论文 r e s m t s e t 一次读取的行数增大到5 1 2 行。 建议从r e s u l t s e t 取得数据时提供字段索引 如果使用字段名从r c s u l t s e t 中获取数据,如g e t s t r i n g ( ”c d m 坍n 口m e ”) ,j d b c 需要在字段名列表中查找该字段。如果使用字段索引,如g e t s t r i n g ( 2 ) ,将会节省 大量的处理时间。 ( 2 ) s o l 语句性能优化 本文重点阐述o r a c l e 数据库管理系统中常用的s q l 语句性能优化方法。 合理设置f r o m 子旬中的表名顺序 o r a c l e 的s q l 解析器采用从右到左的顺序解析f r o m 子句中的表名。因此 f r o m 子句中写在最右边的表将最先被处理。所以当f r o m 子句中包含多个表 时,应该选择记录数最少的表写在最右边。 合理设置w h e r e 子句中的条件顺序 o r a c l e 的s o l 解析器采用自下而上的顺序解析w h e r e 子句。因此,表之间 的连接条件必须写在其他w 瑾r e 条件之前,而那些可以过滤掉最大数量记录的 限制条件则必须写在w h e r e 子句的末尾。 避免s e l e c t 子句中使用通配符 o r a c l e 的s q l 解析器首先要查询数据字典,将“”转换成所有的列名,这个 过程要花费较多的时间。 建议使用w 脏r e 子旬代替h a v i n g 子句 虽然w h e r e 子旬和h a v i n g 子句功能相似,但执行过程并不相同:w 既r e 子句首先根据条件进行筛选形成结果集,然后再进行分组( 如果有g r 烈四b y ) ; 而姒v i n g 于句首先根据g r 0 u pb y 检索出全部记录,然后才根据条件进行筛 选,并且过程中还用到排序、总计等操作。因此,使用w h e r e 子句代替h a v i n g 子旬,能够有效降低系统开销,提高s q l 语句的执行效率。 建议使用e s t s ( n o te s t s ) 子句代替i n ( n o ti n ) 子旬 在多表查询中经常要用到子查询。当需要通过子查询的查询结果来决定主查 询中的记录时,可以采用既i s t s 或i n 子句。但使用e s t s 比使用n 具有更 第2 章w 曲系统性# 2 优化理论研究 好的执行效率,因为i n 或n o tr n 子句将执行一个内部的排序和合并,并且对 表执行全表遍历,执行效率很低。因此,建议尽量避免使用i n ( n o t i n ) 而使 用e x i s t s ( n o te s t s ) 。 充分利用共享s o l 语句 为了不重复解析相同的s q l 语句,s q l 语句在第一次解析后,o r a c l e 将其 存储在内存的共享s q l 池中,共享池可以被所有的数据库用户共享。o r a c l e 在 执行s q l 语句时,s q l 解析器首先在共享池中查看是否有相同的s q l 语句;若 有,则可以直接获得已经被解析的语句的最优执行路径,该功能大大提高了s 0 l 语句的执行性能。 但在判定s q l 语句是否相同时,o r a c l e 采取的是一种严格匹配方式,即两个 s q l 语句必须字符完全一样。园此,为了提高s q l 语句共享的可能性,开发人 员必须统一s q l 语句的写法。 2 5 本章小结 本章阐述w 曲系统性能优化理论的研究,将w 曲系统性能优化过程模型中 的各个步骤逐一展开,包括w 曲系统性能测试方法、w 曲系统性能瓶颈分析, 以及w 曲系统性能优化方法。 第3 章,c b 系统性能优化计算机辅助解决方案研究 第3 章w 曲系统性能优化计算机辅助解决方案研究 3 1 引言 本章旨在,针对影响w e b 系统性能的诸多因素,参考w 曲系统性能优化的 过程模型,阐述w 曲系统性能优化的计算机辅助解决方案。 3 2w e b 系统性能优化计算机辅助解决方案 在第2 章w 曲系统性能优化理论研究的基础上,本文提出一个支持w e b 系 统性能优化的计算机辅助解决方案,如图3 1 所示。 负载压力测试 代码动态测试 代码静态测试 | 1 2 e e 服务器 数据库管理系统 j a v i 虚拟机 操作系统 圉3 1w 曲系统性能优化计算机辅助框架 f 培u r e3 - 1 w 曲s y s t 哪p e r f o r m a n c e l h n m 窖c 哪p u t e r s u p p o r t e d f r a m e w o r k 本文在绪论中已述,w 曲系统性能优化过程模型由性能测试、瓶颈分析、性 能优化和回归测试四个阶段组成。w 曲系统性能优化计算机辅助解决方案能够对 w 曲系统性能优化过程各个阶段均提供计算机辅助支持,如下所述。 3 2 1 性能测试 3 2 1 1 负载压力测试 在性能测试阶段,开发人员使用负载压力测试技术产生被测系统的模拟真 在性能测试阶段,开发人员使用负载压力测试技术产生被测系统的模拟真 试 视 析 j 电 监 汾 鲥 能 虢 幽 性 性 粼 北京工业大学工学硕士学位论文 实负载。 通常,负载压力测试技术包括以下几个方面: ( 1 ) 录制、编辑和执行j 9 1 4 试脚本; ( 2 ) 模拟多虚拟用户并发访问被测系统; ( 3 ) 记录测试数据,包括并发用户数,用户操作的响应时间、成功次数、失 败次数、超时次数等。 目前,支持负载压力测试技术的工具很多,既有成熟的商业软件,也有免 费的开源软件。表2 1 所示列举了主流的负载压力测试工具,并比较了它们 之间的异同点。 表2 1 负载压力测试工具的异同点 t a b i e2 - 1l o 删s 廿e s st e s 甑gt 0 0 l sc o m p 锄t i o n o p e n s t a t e s t m a k e rn 以e t e rl o a d r u n n e r 版权所有开放源码开放源码开放源码商业软件 代理录制 、, 脚本语言 s c lj _ m o nj a v av b 多协议支持仅h r r p 最大虚拟用户数接脚本复杂度、 3 0 0 8 0 0 按通信协议按通信协议、 ( 每客户机)虚拟内存容量不同而变脚本复杂度、 不同而变虚拟内存容量 不同而变 分布式测试 技术支持 第三方厂商、邮 开发厂商、论坛邮件列表、论坛 件列表、论坛 测试结果报告 成本 免费 免费 免费 商业许可证 3 2 1 2 性能监视 在性能测试阶段,开发人员使用性能监视技术采集被测系统各部分的性能数 据。按应用范围划分,支持性能监视技术的工具主要有以下几种【2 2 】: ( 1 ) j 2 e e 服务器监视器采集应用服务器的关键性能数据,统计队列长度,线 程池和数据库连接池等的使用情况。主流的j 2 e e 服务器一般都自身提供监视工 具,例如,b e a 公司的w 曲l o 百c 控制台、i b m 公司的w 曲s p h e r e 性能监视器。 ( 2 ) 数据库管理系统监视器采集、度量数据库管理系统的性能数据,包括缓 第3 章w e b 系统性能优化计算机辅助解决方秉研冗 冲的命中率、磁盘特性( 如排序速度、表扫描速度) 、s q l 响应时间和数据库表 的活跃性等。例如,o r a c l e 公司的o r a c l e9 i 性能管理器、i b m 公司的d b 2 数据 库系统监视器。 ( 3 ) j a v a 虚拟机监视器采集j a v a 虚拟机的关键性能数据,诸如垃圾收集周期、 编译和代码优化事件。例如,j a v a 虚拟机的、,e r b o s eg c ”选项,b e aw 曲l o g i c 的 j r o c k i t 也提供性能监视功能。 ( 4 ) 操作系统监视器收集有关操作系统资源使用的统计数据,包括c p u 的 使用情况,磁盘i o ( 如磁盘读写时间、读写队列长度、i o 率、延迟) ,网络i o ( 如i 0 率、延迟时间) 。例如,m i c m s o f t 公司的系统性能监视器、l i n u x 的 s a r i o s t a t 。 3 2 1 3 代码动态测试 在性能测试阶段,开发人员使用代码动态测试技术采集被测系统的程序代码 的性能数据,包括执行时间、执行次数以及执行路径等【2 3 1 。本文将在第3 _ 2 节对 代码动态测试技术进行详细阐述。 3 2 2 瓶颈分析 在瓶颈分析阶段,开发人员通过性能分析进行统计、汇总被测系统的性能数 据,并以图形化报告的形式进行输出,从而为被测系统的性能瓶颈分析提供计算 机辅助支持。 3 2 3 性能优化 在性能优化阶段,开发人员使用代码静态测试技术对被测系统的程序代码进 行静态分析,查找代码中隐藏的性能问题。本文将在第3 1 3 节对代码静态测试技 术进行详细阐述。 3 2 4 回归测试 在回归测试阶段,被测系统须要进行性能测试,以验证性能优化方法的实施 北京工业大学工学硕士学位论文 效果。因此,开发人员使用与性能测试阶段相同的技术和工具对回归测试阶进行 计算机辅助支持。 3 3 代码动态测试技术 代码动态测试技术( 以下简称为动态测试) 是在被测系统运行时,采集被测 系统程序代码的性能数据,包括执行时间、执行次数以及执行路径等。 3 3 1 现存动态测试技术和工具 3 3 1 1 软件探测技术 l l o y dgw m i a m s 在文献 2 4 仲指出:“软件探测就是在关键点插入代码( 探 针) 来测量软件的执行特性。例如,通过插入代码来记录一项交易任务的开始 时刻和结束时刻以便测量该任务的端到端时间。” 通常,开发人员使用软件探测技术来进行动态测试,是出于如下几点考虑: ( 1 ) 方便性大多数开发人员都是从使用s y s t e m _ c 1 】r r e n t n m e m i l l i s 方法开始测 量代码性能的,s y s t e m c u r r e n f r i m e m i l l i s 方法使用方便,只要测量方法开始和结 束的时间,并输出时间差即可,参考以下代码: ( 2 ) 数据粒度软件探测技术的简单、易用,给开发人员带来了极大的灵活性, 开发人员可以根据自身的需要任意设定动态测试的粒度。 ( 3 ) 控制测试过程基于软件探测技术,开发人员可以根据自身需要,轻松地 选择开始或者停止动态测试过程。 但是,开发人员在使用软件探测技术进行动态测试时,存在着一些不足之处: ( 1 ) 使用软件探测技术,须完成手工作业:确定测试关键点插入代码( 探 针) 一编译、部署、运彳亍 一分析数据;在测试结束时须删除代码( 探针) ;并在 下次测试时重复以上所有步骤。 - 2 0 第3 章w 曲系统性能优化计算机辅助解决方案研究 ( 2 ) 由于手工作业的工作量很大,很难做到在全系统范围内大规模应用软件 探测技术,因而难以对系统各部分的执行情况提供全面的测试。 3 3 1 2 动态测试工具 为了解决上述使用软件探测技术进行动态测试的不足之处,有些开发人员转 而使用像b o 订a n d 公司的o 口t i i l l i z e i t 这样的动态测试工具口”。 开发人员在使用动态测试工具时,无须对代码进行任何改动,并能够采集到 代码中每个方法调用的计时数据信息,对整个系统代码性能状况提供了更加全面 的测试,有效地弥补了软件探测技术的不足。 然而,开发人员在使用动态测试工具时,也存在一些不足: 】) 使用动态测试工具时,通常会带来不小的系统开销,降低测试数据的真 实性、及时性,使其难于在生产环境、负载压力测试环境下所使用。 ( 2 ) 使用动态测试工具时,难以针对特定任务自行设定测试对象,动态测试 粒度难以控制。如测试运行在s e n ,1 e t 容器中的代码时,难以将s e l e t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论