已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
应用服务器中池化技术的自适应优化研究摘要随着i n t e r n e t 的高速发展,计算机技术也进入了以网络为中心的发展时期。网络服务正朝着高效率,低响应时问,高吞吐量的方向发展。人们对高效率和高可靠性的追求,给应用服务器带来了巨大的挑战。池化技术为应用服务器中系统性能的提升注入了新的血液。资源池化技术可以有效增加资源对象复用、减少系统资源消耗、缩短用户响应时间等,对系统性能的提升起到了重要的作用。本文过对资源池化技术的深入分析,分析了池化技术的设计思想、运行机制。对应用服务器中应用的最多线程池和数据库连接池两类资源池进行了优化设计。通过对线程池的优缺点的分析,得出线程池性能优化的关键在于其尺寸是否可以根据任务请求情况而做相应的动态改变。从而提出了一种基于分段自适应算法的动态线程池。该算法根据实际情况将用户的请求分为三个阶段:上升段,平稳段,下降段,然后采用相应的算法对线程池进行线程池尺寸的调整。通过实验与一种基于平均数的自适应线程池的性能进行了比较,表明该基于分段算法的自适应线程池改善了系统的响应时间和资源消耗,具有很好的性能。通过对现有j d b c 数据库连接池的分析,提出了一种自适应数据库连接池的优化策略。将连接池的运行信息进行记录,通过分析比较算法得出数据库连接池的优化参数,以1 的变化额度为限对数据库连接池进行参数修改,使其适应连接请求的变化情况。另外对用户访问数据库的常用数据进行了缓存处理。针对数据在缓冲区的存储,提出了语义集与结果集的二级缓存策略。针对缓冲区数据的更新,提出了先进先出( f i f o )和最少使用( l f u ) 联合调度算法。最后通过与现有数据库连接池的性能测试实验对比,表明该自适应数据库连接池缩短了客户等待时间,降低了对系统资源的消耗,达到了优化数据库连接池的效果。通过线程池和数据库连接池的实验分析,发现通过自适应优化,可以很好地满足用户低响应时间,高效率的要求。因此,池化技术的优化研究在应用服务器的性能优化中有着很好的理论研究价值。关键词:池化技术,线程池,数据库连接池,自适应,优化i vr e s e a r c ho ns e l f - a d a p t i v eo p t i m i z a t i o no fp o n dt e c h n o l o g yi na p p l i c a t i o ns e r v e ra b s t r a c tw t ht h er a p i dd e v e l o p m e n to fi n t e m e t , c o m p u t e rt e c h n o l o g yh a se n t e r e dt h en e t w o r k - c e n t r i cs t a g eo fd e v e l o p m e n t n e t w o r ks e r v i c e si sm o v i n gh i g he f f i c i e n c y , l o wr e s p o n s et i m e ,h i 曲t h r o u g h p u td i r e c t i o n t h i si sah u g ec h a l l e n g et os e r v e rp e r f o r m a n c e p o n dt e c h n o l o g yh a si n j e c t e dn e wb l o o dt oi m p r o v es y s t e mp e r f o r m a n c e p o n dt e c h n o l o g yc a ne f f e c t i v e l yi n c r e a s et h er e s o u r c eo b j e c tr e u s e ,r e d u c es y s t e mr e s o u r c ec o n s u m p t i o n , r e d u c et h er e s p o n s et i m e ,a n dp l a y e da ni m p o r t a n tr o l ei ne n h a n c i n gt h ep e r f o r m a n c eo f t h es y s t e m t h i st h e s i sa n a l y s i sp o n dt e c h n o l o g y sd e s i g ni d e aa n do p e r a t i n gm e c h a n i s m a n do p t i m i z et h r e a d s - p o o la n dd a t a b a s ec o n n e c t i o np o o li nt h i st h e s i s t h r o u g ht h ea n a l y s i so fa d v a n t a g e sa n dd i s a d v a n t a g e so ft h et h r e a dp o o l ,t h r e a dp o o lo b t a i n e dp e r f o r m a n c eo p t i m i z a t i o nl i e si ni t ss i z ec a r ld y n a m i cc h a n g e i no r d e rt os o l v et h es i z e - a d a p t i v eo ft h r e a d p o o l ,w ep r e s e n tat h r e a d s - p o o ls i z e - a d a p t i v ea l g o r i t h ma c c o r d i n gt od i f f e r e n ts e g m e n t s t h i sa l g o r i t h mc h a n g e st h es i z eo ft h et h r e a d s - p o o lb a s e do np r e s e n tr e q u e s t sa n dt h r e a d si no r d e rt om a k es y s t e m sr e s p o n df a s t e ra n dp e r f o r mb e t t e r t h ee x p e r i m e n t ss h o wt h a tt h ea l g o r i t h mc a ne f f e c t i v e l yp r o c e s sm u l t i p l ec o n c u r r e n tr e q u e s t sa n di m p r o v es y s t e m sp e r f o r m a n c e t h r o u g ht h ea n a l y s i so fe x i s t i n gj d b cd a t a b a s ec o n n e c t i o np o o l ,p r e s e n ta na d a p t i v eo p t i m i z a t i o ns t r a t e g yd a t a b a s ec o n n e c t i o np 0 0 1 c o n n e c t i o np o o lr e c o r dt h er u n n i n gi n f o r m a t i o n , o b t a i n e do p t i m i z a t i o no fd a t a b a s ec o n n e c t i o np o o lp a r a m e t e r st h r o u g ha n a l y s i sa n dc o m p a r i s o na l g o r i t h m s ,a d j u s to nt h ec o n n e c t i o np o o lp a r a m e t e r si na m o u n to f1 l i m i tt oa d a p tt oc h a n g e so fc o n n e c t i o nr e q u e s t p r o p o s e ds e m a n t i cs e t sa n dt h er e s u l ts e to fs e c o n d a r yc a c h ep o l i c yf o rd a t as t o r a g ei nt h eb u f f e rz o n e w eu s ef i r s ti nf i r s to u ta n dl e a s tf r e q u e n tu s e dj o i n ts c h e d u l i n ga l g o r i t h mf o rt h eu p d a t eo fb u f f e rd a t a t h ee x p e r i m e n t ss h o wt h a tt h ea l g o r i t h mc a ne f f e c t i v e l yr e d u c ec u s t o m e rw a i tt i m e ,r e d u c et h ec o n s u m p t i o no fs y s t e mr e s o u r c e sa n di m p r o v es y s t e m sp e r f o r m a n c e t h r o u g ht h et h r e a dp o o la n dd a t a b a s ec o n n e c t i o np o o lt e s ta n a l y s i s ,w ef o u n dt h a tt h es e l f - a d a p t i v eo p t i m i z a t i o nc a l ls a t i s f yt h eu s e r sw i t hl o wr e s p o n s et i m e ,h i 曲e f f i c i e n c yr e q u i r e m e n t s t h e r e f o r e ,s e l f - a d a p t i v eo p t i m i z a t i o no f t h ep o n dt e c h n o l o g yh a sag r e a tr e s e a r c hv a l u e k e y w o r d s :p o n dt e c h n o l o g y , t h r e a dp o o l ,d a t a b a s ec o n n e c t i o np o o l ,s e l f - a d a p t i v e ,o p t i m i z a t i o nv插图清单1 资源池的结构62 类c o n n p o o l 的u m l 设计图1 21 线程数的变化情况1 92 基于变化趋势的自适应线程池的结构2 03 算法流程图2 24 线程数的变化情况2 25 不同线程池响应时间对比2 36 不同线程池占用内存对比2 41 自适应连接池组成结构2 72 连接池调整流程图2 93 自适应连接池连接分配时序图3 04 自适应连接池比较分析算法3 l5 数据查询二级缓存结构3 26 缓冲区数据队列3 47 不同连接池的系统延迟时间测试图3 58 内存占用对比图3 69 用户响应时间对比图3 6i x图图图图图图图图图图图图图图图图图表格清单表2 1c o n n p o o l 类与c o n n m a n a g e r 类的功能1 2表2 2c o n n p o o l 类实现的连接池模型1 2表3 1 两种不同算法测试的结果2 4x独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得金b 巴工些厶堂或其他教育机构的学位或证书而使用过的材料。与我一同上作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。学位论文作者签名:醐彳礁哆氕签字日期:年蝴力日学位论文版权使用授权书本学位论文作者完全了解金g 巴三些太堂有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权金g 巴些厶堂可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。( 保密的学位论文在解密后适用本授权书)学位论文作者签名:翻通签字日期:f p 年r 月歹。日学位论文作者毕业后去向:工作单位:通讯地址:导师签签字日电话:邮编:岛湘,一月l 丫致谢光阴似箭,转眼之间即将毕业,终于要踏上新的人生征途,心中充满了兴奋而又有点依依不舍,刚入学时的情景还历历在目,在实验室埋头写程序、调程序、写文档的日子好像就在昨天,所有这一切,无论欢笑还是悲伤,我都将终生难忘。衷心感谢我的导师韩江洪教授,韩老师渊博的知识,丰富的科研经验、严谨的治学态度、刻苦钻研、一丝不苟的治学精神永远是我学习的榜样,值此论文完成之际,我在此谨向韩老师表示由衷的谢意。同时,还要感谢张利教授对我的教诲,正是张老师一直以来的严格要求,才使得自身能力得到了充分的锻炼,同时使我在学习的同时也学会了做人的道理。此外,还要感谢实验室刘征宇老师对我的指导,以及吴迈、刘梦阳、王科富、江月、李鸿明、邓青、金卫平、潘成毅等同学对我的帮助,他们在我三年的研究生期间给我的支持和鼓励,给我创造了一个和谐、融洽的学习环境。最后,我要由衷感谢我的父母,感谢你们一直以来对我的支持,没有你们的鼓励和教导,我不可能取得今天的成绩,明天我一定会以更大的成就,来回报你们对我的无私的爱。v l作者:孙旭东2 0 1 0 年4 月1 1 研究背景第一章绪论i n t e r n e t 从诞生之日起就一直呈高速发展的态势,当前社会已经进入了信息化的时代,计算机技术也进入了以网络为中心的发展时期。网络服务正朝着高效率,低响应时间,高吞吐量的方向发展。目前i n t e r n e t 上的信息正呈现出几何级的增长,对各种应用服务器的性能都提出了巨大的挑战。在较复杂企业级应用中,经常会出现成千上万的用户并发访问的情况,如公务员事业单位等各种报名考试系统,淘宝电子商务系统,世博会售票系统等。人们对信息系统的高可靠性,高效率和低响应时间的需求,促进了网络服务提供商对服务的架构和网络基础设施不断进行改进,追求服务性能的提升“1 。应用服务器的硬件配置和网络等基础设施的改进并不能保证这些硬件设施的性能充分发挥,因为系统软件设计,服务器外部负载的变化等都是影响服务器性能的重要因素。在应用服务器的各种硬件设施已经固定的情况下,如何提升系统的性能已经成为了人们研究的重要方向。固定配置的应用服务器,其中的各项资源( 内存,网络连接,数据库连接等) 是有限的,合理分配和管理这些有限资源将会给应用服务器的性能带来新的提升点。为了合理利用这些宝贵的有限资源,资源管理的指导原则是:尽可能缩短任务对资源的独占时间,并减少资源的重复分配,因此软件设计人员对资源采用了共享的方式,将资源在时间或空间上尽量复用“1 。目前,在复用资源上池化技术是一个很好的选择。池化技术如果使用恰当可以提高系统的性能,缩短响应时间等,但是如果使用不当则达不到预期的效果。因此,如何优化资源池就成了池化技术一个重要研究方向。本文正是从优化的角度,来研究如何用自适应技术对资源池进行系统性能优化的问题。1 2 国内外研究现状1 2 1 资源池化技术在应用服务器的配置固定的情况下,其中的一些有限资源,如内存、数据库连接、网络连接、线程等,成了影响应用服务器发挥性能的瓶颈。这些有限资源的使用直接影响着应用软件运行效率,这些资源能否有效利用与用户的满意程度直接相关3 1 。因此在应用服务器开发过程中资源管理是开发人员需要考虑的一个重要问题。采用资源池技术是解决这一问题的重要手段。d r c l i f f c l i c k 在j a v a o n e2 0 0 3 上发表的( p e r f o r m a n c em y t h se x p o s e d 中分析了多种资源对象池化的性能表现。惠普在其产品s t o r a g e w o r k s 中采用了资源池的设计思路,为用户提供了高效率的服务。目前在s u n 公司推出的s o l a r i s 8 ,s o l a r i s 9 和s o l a r i s l 0系统中也已经将资源池技术应用其中。线程池是资源池的一个成熟的应用领域。目前,很多服务器提供商都在它们的产品中应用了此项技术,比如i b m 的w e b s p h e r e ,i o n a 的o r b i x2 0 0 0 ,微软公司在其a t ls e r v e r 中也成功的应用了线程池机制4 钉。线程池技术对于a t ls e r v e rw e b 应用程序的高性能和可缩放性起着关键作用。i s a p i 扩展d l l 将它接收的每个请求添加到请求队列1 ,这快速释放了w r e b 服务器线程以处理其它的传入请求,并确保了应用程序能够随着访问客户的多少变化而进行适当地缩放。加入到队列中的客户请求按加入队列的先后顺序依次得到服务响应。但是,使用c t h r e a d p o o l 类创建的线程池不能根据客户访问量而自动的缩放。s u n 公司线程池方面也有深入的研究,其推出的几款消息服务器中,都使用线程池机制。典型的消息驱动型b e a n 池即为一个线程池,池中的每个消息驱动型b e a n 实例都与一个服务器会话关联,而每个服务器会话又与一个线程关联7 1 。因此,线程池大小越大,线程数量越多,就会影响系统性能和消耗服务器资源8 1 。微软公司和s u n 公司为了节约系统资源,有选择采取线程池机制。他们在具体实现上采取了不同的策略,各有优点。作为资源池的一个重要的应用领域,数据库连接池也得到了广泛应用。主流的商业数据库,如o r a c l e ,s q ls e r v e r ,i b md b 2 等,开放源代码的数据库,如p o s t g r e s q l等都有它们自己的数据库连接池。其中p o s t g r e s q l 不仅有一般常见的前台连接池,还具有后台连接池9 1 。另外,主流的应用服务器( 或w 曲容器) ,i b mw e b s p h e r e ,b e aw e b l o g i c ,a p a c h et o m c a t 等,也都集成有数据库连接池。其中w e b s p h e r e 提供了连接的管理器,并使用它提供的方法g e t c o n n e c t i o n 就可以动态地从数据库连接池中获得连接们。w e b s p h e r e 中的连接池不仅缩短了响应时间,而它还提供了一个数据库的抽象层,该层可以缓存客户端的应用,使得切换数据库十分容易1 。w e b l o g i c 贝, l j 提供了p o o l 驱动,该驱动可以使应用程序开发员直接在服务器端应用程序中使用连接池。这些不同的数据库连接池,用户都可以通过自己设置参数来配置,这为数据库管理者和使用者提供了方便。1 2 2 服务器性能优化根据m e m r y 的研究报告,9 8 的w e b 服务器都没能达到人们所期望的性能,平均只能发挥人们所期望性能的1 6 左右1 。因此,有很多人都在对性能优化做研究。当前集中考虑的主要是用户端响应时间及后台服务器端资源使用两方面。从2 0 0 4 年起,y a h o o 公司专门成立了一个性能分析团队,他们开发实际工具并进行严格的数据分析,来改善他们产品的性能。在提高网页速度方面y a h o o l 拘e x c e p t i o n a lp e r f o r m a n c e团队提供了从开始的1 4 种到2 0 种,再到现在的3 4 种最佳实践,缩短了y a h 0 0 2 5 至5 02的响应时间n 。国外著名i t 公司b e a ,i b m ,o r a c l e 一直比较关注性能优化问题,例如b e a 的w e b l o g i c 中间件服务器优化产品,它的主要策略是减少或消除等待队列,提高系统稳定性和响应速度,主要从e j b 容器、j d b c 、j m s 、w e b 容器、j v m 等子系统入手对服务器进行调整和优化n 。国内的中间件厂商在性能优化这一领域也都投入力量进行研究,比如金蝶公司。金蝶公司的旗舰? u :品a p u s i c 应用服务器是我国在自主知识产权系统软件领域的重大突破“舳,特别是在底层技术形成了与国外产品不同的特色,为国家建设电子政务、电子商务、行业应用提供了最有力的保障。目前常用的系统性能优化技术有:代码优化技术,缓存技术1 ,负载均衡技术n ,自适应技术,分布式计算技术钉。预计今后,随着电子商务等各种网络应用的发展,应用服务器的性能优化问题,将会成为该领域中的热点之一,性能优化技术还会得到进一步的发展和应用。1 3 研究内容本论文的主要研究内容是应用服务器中池化技术的优化。在系统设计过程中需要考虑到各种资源的优化使用,如线程,数据库连接,s o c k e t 连接等,采用池化技术,可以对应用服务器中各种有限资源进行合理的分配和管理,提高了系统的适应性和稳定性,从而使应用服务器可以应对高负载,高并发的工作场景,为用户带来高效稳定的体验。本文将对应用服务器中常用的两种池化资源:线程池和数据库连接池做具体的优化研究。本课题所做的研究主要为以下四个方面:( 1 ) 对应用服务器中常用的两种资源池一线程池和数据库连接池进行深入了解和研究。( 2 ) 研究了线程池的动态调整问题,通过系统访问的客户量的仔细分析,将客户访问量的情况分为上升段,波动段,和下降段三种情况,针对不同阶段采用不同的调整策略,进而提出了分段自适应线程池及其算法实现。( 3 ) 研究了数据库连接池的原理并分析了现有连接池的不足,通过对日志文件记录的历史信息进行分析比较,从而改进连接池的配置参数,达到自适应调整的目的。( 4 ) 对数据库中常用数据采用了缓冲区设计,采用等比机制改变缓冲区的大小,提出了基于先进先出( f i f o ) 和最少使用( l f u ) 两种算法的组合算法进行缓冲区的调度,解决了缓冲区高访问数据的生命周期短的问题。1 4 论文的组织本文分析了线程池和数据库连接池两种资源池的基本设计原理,运作机制,针对其动态调整问题,提出了解决的自适应策略和算法,最终通过实验结果分析表明,取得了很好的优化效果。论文的章节安排如下:第一章通过分析线程池和数据库连接池的研究现状及资源池性能优化的方向方法,引出了本文所进行的针对两类资源池进行自适应优化的设计内容,阐明了本课题研究的内容、目的和意义。第二章从池化技术出发,通过对线程池和数据库连接池的原理优缺点分析,阐述了进行自适应优化的重要性。第三章对线程池大小调整的方向及方案进行了分析,提出了基于分段算法的自适应线程池。该线程池根据用户访问量呈现波峰波谷的形体讲其分为访问量上升段,下降段和平稳段。根据不同阶段访问量的不同趋势采用不同的调整策略。最终通过与基于平均数算法的实验分析对比,说明了基于分段的自适应线程池具有很好的自适应优化效果。第四章阐述了自适应数据库连接池的设计思路,技术优点以及组成结构。通过针对x m l 日志文件的比较分析算法的实现,解决了连接池配置参数自适应的问题。对高访问率的数据进行缓存处理。设计了先进先出( f i f o ) 和最少使用( l f u ) 的联合调度算法。最后通过实验与现有的连接池进行性能测试比较,发现提出的自适应数据库连接池可以显著缩短响应时间,减少内存使用,提高了系统的效率。第五章总结本课题的研究工作,阐述了已经完成的以及尚需完善的方面,并提出了进一步改进的方向和思路。4第二章池化技术应用服务器中资源池技术的应用可以很好的提升系统的整体性能,缩短用户的响应时间。这一章中将详细介绍池化技术,并对两种重要的资源池,线程池和数据库连接池进行深入的分析。2 1 池化技术2 1 1 池化资源技术在应用服务器的配置固定的情况下,其中的一些有限资源,如内存、数据库连接、网络连接、线程等,成了影响应用服务器发挥性能的瓶颈。这些有限资源的使用直接影响着应用软件运行效率,这些资源能否有效利用与用户的满意程度直接相关“1 。因此资源管理是开发应用程序时需要考虑的一个重要问题。资源池是解决这一问题的良好方式。资源池就是把需要的资源保存在一个特定的容器中,容器中的这些资源可以重复地使用,减少建立销毁开销,从而提高系统的性能n 钉k 0 1 。由于资源可以重复使用,便会减少重复创建、销毁资源所带来的开销舯1 。所以使用池化技术可以明显的提高应用服务器的运行速度,缩短用户的响应时间和系统资源的消耗。池化资源技术的基本思路是:在资源池初始化的时候提供一定数目的初始资源,当有客户请求该资源时,资源池分配给一个资源供其使用,同时给该资源标识为忙,标识为忙的资源不能再被分配使用,当某一个资源使用完后,资源池把相关的资源的忙标识清除掉,以示该资源可以再被下一个请求使用,再重新将该资源放回资源池中,其他的用户可以再次使用该资源2 。在应用服务器开发方面,资源池( r e s o u r c ep 0 0 1 ) 被广泛的使用。在开发应用服务器的时候,各种资源池的设计实现成为一个重要的组成部分。从资源池的结构上看,它具有池对象和资源对象两块。从资源类型上来看,资源池大致可以分为两种类型伽1 ,一种池中的资源可以处理用户任务请求的,主要就是线程池( n 玳a dp 0 0 1 ) 。另一种池中的资源可以被用户使用的,一般描述为对象池( o b j e c tp 0 0 1 ) ,数据库连接池就是一种典型的连接池。不同类型的资源池可以解决不同的问题。应用服务器大都会收到由用户发过来的大量的任务请求,服务器在处理任务请求的时候需要对每个任务分配一个线程,而高密度的任务请求会给服务器的性能带来很大的挑战。线程池通过提供一定数量的可以重复使用的线程,使得很多短小的任务请求可以由一个线程先后处理。一方面降低了用户任务请求的等待时间,一方面减少了重复建立线程所造成的资源消耗。使用线程池可以让服务器在响应时间和资源利用率两个方面提高性能。对象池包含的资源类型很多,如数据库连接,s o c k e t 连接等等。目前数据库连接池是一种应用研究非常广泛的资源池。用户从数据库查询数据分三步骤:首先是要建立一个数据库连接;然后通过连接进行s o l 操作,取出或更新数据;最后断开连接。每一次客户请求都需要建立一次数据库连接,每建立一次数据库连接就需要花费o 0 5s 1s 的时间,需要消耗很大的系统资源;频繁地建立、关闭连接,大大增加了系统的开销,极大的降低了系统的性能,数据库连接池将连接资源事先存储在连接池中,连接池提供一种管理调度的机制控制数据库连接建立销毁。连接池内的连接可以重复使用,从而降低了系统的资源开销,提高系统的性能。2 1 2 资源池运作机制资源池初始化时,由资源池管理器提供一定数目的初始资源,当有客户请求该资源时,资源池分配给一个资源供其使用,同时给该资源标识为忙,标识为忙的资源不能再被分配使用,当某一个资源使用完后,资源池把相关的资源的忙标识清除掉,以示该资源可以再被下一个请求使用,再重新将该资源放回资源池中n 盯。如果客户请求很多,资源池的资源不能满足客户的需求,那么就采用一定的调整策略来增加资源池内的资源数量( 资源池尺寸) 。但是每个资源池都有上限,即系统的可用资源数量,所以当资源池尺寸达到资源池上限时,资源池的尺寸将不再继续调整,而是拒绝新的客户请求,或者在客户请求队列中排队等待。同样如果客户请求很少,也会减少资源的数量( 以初始化资源数量为下限) 。这样资源池中的资源数将根据客户请求量的多少在资源池尺寸上下限之间按照调整策略来调整。为了更好的提高资源池的效率,就需要在资源池尺寸上下限的选择,以及在上下限之间的调整策略上做出优化。如图2 1为资源池的结构图。2 1 3 资源池常用的参数图2 1 资源池的结构资源池中存放一定数目的资源用来满足客户的服务请求。但是客户所需的资源数目却是不确定的,当客户需要的资源数目多于资源池中的资源数目时,资源池就不能6够满足客户的需求;当客户需要的资源数少于资源池中资源数时,就会有一部分的资源没有得到利用,造成了资源的浪费。这样就造成资源池不能发挥其优势,提高服务效率,优化系统性能。针对这个问题,常给资源池设置两个参数:初始资源数目,最大资源数目。1 初始资源的数目。初始资源数目,又叫最小资源数目。当资源池启动时,资源池里会有一定的资源数目,就叫做初始资源数目。资源池的资源数目会因为服务需求的多少而改变,有时增加,有时减少,但是一定不会少于初始资源数目,所以也叫最小资源数目。初始资源数是可以满足客户在大部分情况下的需求的一个较小的值。2 最大资源的数目。在资源池初始化时,资源池中有初始资源数目的资源。当客户的需求不断增加的时候,资源池里的资源就不能满足客户的需求,这时资源池就要增加其中的资源,以满足客户的需求。但是系统的资源总量是有限的,资源池里的资源数不能无限制的增加。所以,资源池就有了另一个参数,最大资源数目。当请求的资源超出这个数目,也就是达到了系统的性能上限,就需要客户等待,或者拒绝客户的资源请求。3 资源最大空闲时间。资源池内的资源可能存在过剩的情况,即有些资源长时间处于空闲状态。这些资源长时间占用系统的内存等资源,但是却没有起到应有的作用,所以在其空闲超过一定时间后将其销毁,以节约系统资源。2 1 4 常用的池化资源资源池化技术可以合理地分配系统资源,增加系统的灵活性和适应性,从而使应用系统更适合高负载,高并发的工作场景,为信息化的进一步发展扫清障碍,所以池化技术在很多方面都有应有。诸如s o c k e t 连接池,线程池,数据库连接池等。如在2 1 1节中所述,从资料类型上资源池可分为两种类型,线程池( t h r e a dp 0 0 1 ) 和对象池( o b j e c tp 0 0 1 ) 。这两种资源池是目前使用最为广泛的,本文将在后面的章节重点介绍线程池和数据库连接池及它们的自适应优化。2 2 线程池对于应用服务器,客户端会对其发出各种各样的任务请求,这些任务请求具有任务简单,任务量大的特点。对于大量的任务请求,应用服务器需要对每一个请求进行单独地处理,给系统性能带来了调整。线程池是解决这一问题的很好的选择,线程池通过批量建立线程,减少了线程地重复创建和销毁,同时当用户向应用服务器发出任务请求时,不需要重新建立线程,缩短了用户请求的响应时间,从而整体地提高了系统的性能。2 2 1 线程池优点分析应用服务器在处理任务时,大多数时候下接收到的任务请求都是任务本身短小,7易于处理,但是整体的任务量却很大“幻。在应用多线程处理应用服务器的请求任务时,通常采用的模型有两种:一是每个请求对应个线程( t h r e a d p e r - r e q u e s t ) 方法。二是单个后台线程( s i n g l e b a c k g r o u n d t h r e a d ) 方法。每个请求对应一个线程( t h r e a d p e r - r e q u e s t ) 方法是对每个向应用服务器发出的任务请求都分配一个单独的线程去处理。这种方法比较简单,对于一些比较简单的系统或者原型系统比较适用,但是对于稍微复杂点的应用服务器来说,其都不能满足需求。其一,如果每收到一个用户请求,服务器就建立一个线程来处理请求,会给服务器带来很大的额外开销,因为为每个请求创建新线程给服务器带来的建立销毁线程的资源消耗可能要比处理任务请求本身还要大。其二,除了创建和销毁线程的开销之外,活动的线程本身是另一个系统资源消耗点,如果系统中存在大量的活动线程,必然会对内存造成极大的消耗比朝。单个后台线程( s i n g l e b a c k g r o u n d t h r e a d ) 方法是为某一类的任务分配一个统一的线程来处理。在j a v a 中的图形图像处理中就采用该模型。在a w t 和s w i n g 中用g u i事件线程来处理用户界面的所有操作变化,但是由于只有一个线程来处理,所以处理的速度并不理想。因此,s w i n g 应用程序经常需要额外的工作线程,用于运行时间很长的、同u i 有关的任务2 钉。这种方法处理任务量很大的情况时,很难满足用户需求。由以上两种模型我们可以看出,在建立应用服务器时,需要考虑连个方面的需求,一是不能过度浪费资源,二是要能够尽量满足用户的需求。线程池机制可以很好的解决这两个问题。线程池是在启动之初就建立一批线程,这些线程可以重复处理用户的任务请求,那么平均到每个任务的建立和销毁开销就小了很多。在用户发出任务请求的时候线程池中已经建立的线程,不需要临时建立新的线程来处理该任务,势必会缩短响应时间。另外,线程池会根据任务请求量对其中的线程数目实时调整。这样可以避免大量空闲线程造成的资源浪费。每个任务一个线程( t h r e a d p e r - r e q u e s t ) 方法适合处理任务少,周期长的任务;单个后台线程( s i n g l e - b a c k g r o u n d t h r e a d ) 方法适合处理响应时间需求低的任务;线程池适合处理任务短小但是量大的情况。每种方法都适合不同的情况,对于应用服务器,它接收到的请求任务大都是任务的周期很短,整体上任务量很大的情况,采用线程池机制来处理可以降低用户的响应时间和系统的资源消耗。2 2 2 线程池风险分析有句谚语,每个硬币都有两面。线程池机制有其优点,当然也有缺点。线程池是在构建多线程应用程序时,还是会存在一定的风险。用线程池机制构建的应用程序不光容易遭受任何其它多线程应用程序容易遭受的所有并发风险,诸如同步错误和死锁。它还容易遭受特定于线程池的少数其它风险,例如与线程池有关的死锁、资源不足和线程泄漏等。( 1 ) 死锁。使用多线程必然会带来死锁的风险。对一组正在执行的线程,其中8每一个线程都需要该组中另一线程的执行结果作为继续执行的条件时,该组线程就出现了相互制约的情况,称该组线程出现死锁2 钉。在使用线程池时会带来新的类型的死锁情况:由于线程池在某一时刻,线程数是有限的,就会出现某一任务处于等待队列中不能执行的情况,如果池内工作线程需要该任务的执行结果,那么就出现了死锁。这种死锁的产生是由线程池机制引起的。( 2 ) 资源不足。在上一节中分析了线程池机制的优点,其中之一便是可以节约系统资源。但是发挥该优点是有条件的:线程池中的线程数处于合适的大小。除了线程本身消耗内存等系统资源外,每个线程还有调用堆栈,大量线程之间的上下文环境切换都会占用大量的内存和c p u 资源嘶1 。所以线程池中的线程数目如果不合理,会带来巨大的资源消耗,而且过多的线程所消耗的系统资源可能正是其他的任务所需要的,这就加剧了系统的资源不足现象。本文将在第三章具体介绍线程池尺寸的自适应优化调整。( 3 ) 并发错误。线程池的工作线程依靠使用w a i t ( ) 和n o t i f y ( ) 方法“钉来及时的取得任务。但是这两个方法都不易使用。开发人员在使用这两个方法处理并发问题时,很容易出现丢失通知而导致线程长期悬空的情况。线程池中线程很多,经常出现多个线程需要相互协调处理任务的情况,在使用这些方法时需要格外小心,( 4 ) 线程泄漏。线程泄漏是使用线程池时需要面对的一个较大的风险。线程池中某个线程被分配给某一任务,该线程在处理完这个任务后却没有向预定的那样回到线程池中。比如某个任务抛出的r u n t i m ee x c e p t i o n 或e r r o r ,没有被线程池捕捉到,那么处理这个任务的线程将会异常终止,线程池的大小将会永久减少一个n 7 1 。如果线程池的大小是固定的,线程池终究会因为这种情况的多次发生而变空。这时,系统会因为没有可以工作的线程而终止运行。( 5 ) 请求过载。应用服务器在不同时间所处理的任务量是不同的。在一个特定的时候,可能会由于过量的任务请求而导致服务器的崩溃。这是可以采用拒绝或者其它处理方式,取决于开发人员的策略。2 2 3 使用线程池的准则线程池机制有其自身的优点,当然也有各种使用风险。要想充分发挥其优点,我们在使用的时候就需要遵循一定的准则汹别。( 1 ) 不要对那些同步等待其它任务结果的任务排队。在2 2 2 节中介绍了线程池机制带来的新的类型的死锁。为了避免这种情况,将需要以其他线程执行结果作为执行条件的线程排出等待队列。可以防止多个线程的相互等待,从而避免这种情况的死锁。( 2 ) 不要给可能发生阻塞的任务分配线程。如果某个任务的执行时间很长,甚至可能发生阻塞,那么需要规定最长等待时间,以防止执行该任务的线程发生泄漏。( 3 ) 了解任务。线程需要执行的任务的多种多样,不同类型的任务具有不同的9特点,有些是不易阻塞的运算型,有些是容易发生阻塞的i o 操作型,如果各个任务特性差距很大,可以设置多个池来分别解决,会带来更好的效果。( 4 ) 防止任务过载。在2 2 2 中我们介绍了可能发生的任务请求过载的情况。在使用线程池时如果系统的负载过大,就要拒绝任务或者让其长时间等待。2 2 4 线程池分类按照线程池尺寸是否可变可将线程池分为固定线程池和动态线程池瑚1 。固定线程池中线程数的大小是固定的。固定线程池调度管理通常要求开发人员或用户手工配置线程池的规模,无论用户访问量是多是少,所配置的规模在整个应用的运行过程中保持不变。该方法的不足之处是如果一段时间用户请求数很少,线程池的空闲线程并不会被销毁,耗费了系统资源;而当用户请求很多时,线程池也不建立新的线程,造成用户请求不能及时得到响应咖3 。对于高性能的应用服务器,其系统可用资源和接收到的任务请求都是随时变化的,这种线程池不能满足需求。动态线程池可以在预设的上下限范围内灵活改变线程池尺寸。下限值是满足大多数情况下用户请求的一个较小的值,以让出较多资源供系统其他部分使用。上限值是系统可提供资源的最大值。在下限值和上限值之间则根据用户请求数的情况通过特定算法来调整线程池的尺寸咖1 跏。动态线程池的线程数不是向固定线程池那样一直不变,根据任务请求以及系统资源情况,会实时变化。研究显示,只有合理选择线程池的尺寸才能充分发挥线程池技术的优势,有效提高系统的服务质量n 1 。动态线程池更能适应现在应用服务器的需求。2 3 数据库连接池在一个基于数据库应用的系统中,数据库连接的建立和销毁是该应用系统中成本较高的操作之一3 。传统的客户从数据库查询数据分三步骤:首先是要建立一个数据库连接;然后通过连接进行s q l 操作,取出或更新数据;最后断开连接。如果一个数据库应用比较简单,对数据库的访问量并不大,那么每次访问时新建一个连接,用完之后再关闭,并不会带来明显的影响系统性能;但是数据库应用非常复杂的话,每一次客户请求都需要建立一次数据库连接,每建立一次数据库连接就需要花费0 0 5s - 1s 的时间,需要消耗很大的系统资源;频繁地建立、关闭连接,大大增加了系统的开销,极大的降低了系统的性能,对连接的使用就成了系统性能的瓶颈,因此传统的数据库连接模式的缺陷愈发明显m 1 。数据库连接池技术是将连接资源事先存储在连接池中,连接池提供一种管理调度的机制控制数据库连接建立销毁。连接池内的连接可以重复使用,从而降低了系统的资源开销,提高系统的性能。2 3 1 数据库连接池的组成数据库连接池是将一定数量的数据库连接作为对象存储在v e c t o r ,s t a c k 等对象中,1 0形成一个储存数据库连接的容器,也即是连接对象的集合晒1 。在数据库连接池中的这些连接对象可供用户重复使用,直到生命周期到才会被销毁。数据库连接池主要由三部分组成:连接池的建立、连接池中连接的使用管理、连接池的关闭隅1 。( 1 ) 连接池的建立。建立连接池时需要建立一定数目的连接,连接池根据配置文件中的配置参数来建立。由于所需连接是根据配置文件来建立的,所以是一个静态的连接池,其中的连接数目时配置文件设置好的,在运行过程中无论访问量的高低都不能自行改变。当有用户需要连接的时候就分配一个空闲的连接,连接断开后重新回到池中,减少了重复建立的时间和资源开销。( 2 ) 连接池的管理。当连接池建立好以后,如何对其中的连接进行管理对系统的性能会有很大的影响。采用连接池管理器对整个连接池进行监测管理。管理器通过对连接池的运行状态进行周期性的监测,确定连接池的运行状况,进而做出具体的调整。具体思路为:设置连接的最大空闲时间,如果连接空闲时间超过了设置值,则将其销毁。如果连接池中的连接数目过少,已经少与连接池的下限时,就新建连接到连接池的最小连接数d 3 3 。如果有用户访问数据库,给他分配一个连接,使用完毕后释放连接到连接池中。由此可知:连接池可以避免连接的重复建立销毁,达到连接的复用,从而降低资源开销。( 3 ) 连接池的关闭。在应用程序退出时,将连接池中所有的连接一起销毁并关闭连接池。这与连接池的建立正好是一个相反过程。2 3 2 主流唧服务器中数据库连接池配置策略当前绝大部分w e b 应用程序服务器都采用了连接池机制,连接池的参数配置一般采用运行环境配置方式或者基于x m l 文档的配置方式。目前采用连接池机制的主流应用服务器主要有b e a 公司的w e b l o g i c 勰1 和s u n 公司的t o m c a t 3 9 1 。w e b l o g i c 中主要是在c o n f i g x m l 文件中设置各种参数。t o m c a t 数据库连接池的配置需要修改两个文件:s e r v e r x r n l 文件和w e b x r r d 文件。前者是设置连接池中各个参数的文件,后者是各个应用的专属文件,以便于利用j n d i 进行查找,获从而得数据库连接。目前,各大型应用服务器,包括w e b l o g i c ,t o m c a t 中的数据库连接池,在设定连接数目,连接最大空闲时间等初始化的参数时,基本上都是采用的静态配置策略,即一次配置,永远有效的策略,不能根据用户需求动态调整。另外连接池的初始配置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《DBT 108.4-2025活动断层探查 地震勘探 第4部分:短周期密集台阵探测法》(2026年)合规红线与避坑实操手册
- 广西壮族自治区柳州市2025年中考一模英语试题(含答案)
- 某省市规划建筑设计工作汇报总结
- 产假后重返职场规划
- 大学生就业指导意义
- 脑梗死专业知识考试试题及答案解析
- 高邮城南新区职业规划
- 多边形及其内角和课件2025-2026学年人教版数学八年级下册
- 2026七年级道德与法治下册 青春电影观看途径
- 医院消防设施工作制度
- 2025年青马班考试题目及答案
- 马来西亚中学数学试卷
- 新生儿呛奶窒息预防与处理
- 盛大传奇协议书
- 兵团连队资产管理办法
- 2025年北京市海淀区高一(下)期末考试数学试卷(含答案)
- T/CCT 003-2020煤用浮选捕收剂技术条件
- 企业环保安全评估报告模板
- 放射化学试题及答案
- 深圳一职笔试题及答案
- 《神经系统损伤定位》课件
评论
0/150
提交评论