压力测试与故障分析.ppt_第1页
压力测试与故障分析.ppt_第2页
压力测试与故障分析.ppt_第3页
压力测试与故障分析.ppt_第4页
压力测试与故障分析.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

提纲,集群相关内容故障定位分析与系统优化压力测试相关内容问题解答,网络拓扑图,集群,集群(Cluster)是一组对外提供相同服务的服务器组集群可以通过软件或硬件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA),提高系统可靠性集群对客户端是透明的,从客户端的角度来看,集群和单独服务器表现一致集群具有可伸缩性,可以根据系统负荷变化情况方便的调整服务器数量,四层交换,四层交换机的基本功能根据IP和端口转发内外IP转换工作在四层的LB和HALoadBalance分发算法:源地址、最小连接数、轮循等HA机制:基于端口的健康检测工作在七层的LB和HA根据Cookie或URL中的SessionID作分发,保证Session黏性基于脚本的健康检测,可发出HTTP请求并根据HTTP返回码来判断服务器状态(“/Alteon.jsp”即专为Alteon作健康检测用)常见的四层交换机:Alteon、RedWare、F5,四层交换的会话保持,Weblogic集群,可以通过BEA提供的软件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA)Weblogic集群能通过打开SessionFailOver来保证用户的会话不被丢失使用集群可在部署时减少出错的机会由于集群内的服务器需要相互通讯,所以集群会带来额外的开销,并且会减慢系统的启动速度,管理与被管,管理服务器负责配置和管理被管服务器,不承载业务。被管服务器启动时通过管理服务器获取配置信息并接受管理服务器控制,被管服务器负责承载业务。,集群间通讯,T3集群内服务器使用T3协议(BEA私有协议,使用)进行点对点的通讯IPMultiCast(IP组播)单播(UniCast)广播(BroadCast)组播(MultiCast)集群内的服务器通过IPMultiCast来进行一对多的通讯,如:心跳包IPMultiCast地址范围:从到55必须保证集群组播地址的唯一性,否则会导致集群通讯混乱。目前的组播地址规则:237.xxx.xxx.xxx后面几段根据产品和版本变化集群过大会导致集群内通讯堵塞,降低整个集群的性能,Session,什么是Session在服务器端保存的一个对象,用于在web应用程序的多个HTTP请求之间跟踪和一个用户的交互。在JAVA中是用哈希表实现,用名值对的方式保存。Session在服务器端的保存机制使用哈希表保存,以SessionID为主键服务器端如何确认客户端的身份1、HTTP头信息中CookieCookie:JSESSIONID=BqZsqqGjl!12345678!-876543212、使用URLRewritingGET/a.jsp;jsessionid=Dvb20pXS!12345678!-87654321?a=123HTTP/1.03、服务器端只根据SessionID确认用户身份,所以需要防止用户SessionID泄漏,同时需要加强SessionID复杂度,防止伪造,Session容错,Session容错的目的是在某主机或应用当机时,或者在负载均衡设备分发错误时,保证用户会话信息不被丢失SessionFailOver种类:NOFailOver:无FailOverIMR:InmemoryReplication在Session复制备机内存复制Cookie:使用客户端Cookie保存Session信息JDBC:使用数据库保存Session信息File:使用文件系统保存Session信息,容错方式性能比较,Session复制,Session复制是把用户会话信息在集群内的Session复制备机上保存一份备份,这样在服务器当机或用户请求被送到错误主机时,Weblogic会从Session复制备机取回备份,从而保证用户会话信息不被丢失Weblogic使用T3私有协议实现Session复制Session复制中的复制组的考虑集群内的每个服务器都可以指定自己所在的复制组和自己的优先复制组若无复制组,则系统随机选择复制组Session复制的主机和备机同时更新Session信息时会导致系统线程死锁Session复制会消耗大量系统性能,并且可能造成系统堵塞,除非业务流程需要,否则不应该打开Session复制Session复制是一种容错措施,系统的正常运行不能依靠Session复制,Session复制状况观察,sso03、sso05优先复制组为sso01,Session复制的注意事项,在Session中保存的数据必须可序列化保存在Session中的数据发生变化时,必须显式调用setAttribute方法Session复制会带来额外的性能消耗页面分帧的情况如果页面分为多帧,则多个子页面的请求可能会同时发到服务器,各子页面都会生成Session,为避免在系统生成多个Session,应该在父页面先把Session生成,或者保证子页面中只有一个页面会生成和修改Session,SessionID格式,SessionID格式:name=sessionid!pjvmid!sjvmid使用Session复制的正常情况:,文件句柄数,什么是文件句柄每打开一个文件、socket连接、监听一个端口都需要占用一个句柄系统需要多少文件句柄数正常情况下系统文件句柄数在1000左右,大并发系统和系统并发量有关weblogic执行线程数weblogic队列数backlog长度1000冗余全局文件句柄数和进程文件句柄数使用sar和lsof可以查看系统当前使用的文件句柄数文件句柄数不够会出现什么问题?进程文件句柄数不够会导致进程无法继续监听端口、无法写新的日志文件若系统全局句柄数不够还会导致系统无法telnet,只能到现场重启服务器文件句柄数会消耗系统资源,所以不能过大,磁盘缓存,如何查看磁盘缓冲使用情况Linux:topHPUX:kmeminfo如何减少系统磁盘缓存占用系统内存Linux:核心参数不可调,但系统内存不足时会自动释放HPUX:核心参数可调但系统内存不足时不能自动释放参数:dbc_max_pct建议值:10解释:MaxDynamicBufferCacheSizeasPercentofSystemRAM,队列与线程池,队列与线程池,线程池处理线程数的确定系统每秒需要处理的请求数系统处理请求时的平均响应时间线程池队列长度的确定每个保存在队列中的连接都会占用一个系统文件句柄,所以队列不应太大Backlog的确定系统在作垃圾回收时会停止响应,此时操作系统会将接收到的连接保存在系统的连接队列中,若连接队列满,则系统会直接将连接拒绝掉,所以backlog的最小长度应该等于每秒用户请求数最大垃圾回收时间,数据库,使用连接池是为了减少建立连接的消耗,提高性能Pool、MultiPool、DataSouceMultiPool分发算法:HA与LB连接可用性检查多余连接的回收(目前不使用)连接泄漏检测连接池连接数目确定若应用需要频繁访问数据库,则数据库连接池的连接数应该和执行线程数保持一致若只有部分请求需要访问数据库,则数据库连接池连接数可以少于执行线程数(我们的大部分应用属于这种情况)具体连接数的确定应该根据实际使用时连接池中的等待情况和数据库的使用情况来确定,故障定位思路,1、检查系统日志,包括StartErrorInfo.txt、nohup、server.log2、检查应用系统错误日志3、检查和kernel的交互日志,包括sgclient和sgbiz,观察日志中的超时请求量及sgbiz日志中的kernel响应时间4、利用bakerror脚本作故障现场备份,然后检查备份下来的各类信息,堆栈分析空闲线程,分析线程堆栈的步骤:1、间隔3到5秒,连续作3次ThreadDump;2、使用vi或文本编辑工具查看线程堆栈情况;3、计算各状态线程的数量。正常情况下,大部分线程应该都处于空闲状况。ExecuteThread:0forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.lang.Object.wait(NativeMethod)-waitingon(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)-locked(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172),堆栈分析繁忙线程,正常情况下,会有少量线程处于繁忙状况,从这些繁忙线程的堆栈可以看到一般都是在处理比较耗时的操作,Portal里面一般是在等待kernel返回消息。若发现大量的线程都在等待kernel返回消息,则说明kernel发生堵塞。若发现比较多的线程处于繁忙状态,但又不是在等待kernel返回消息,则说明此处可能有性能瓶颈,需要优化。ExecuteThread:142forqueue:rundaemonprio=1tid=0 x0854a2f0nid=0 x27a6inObject.wait()444f5000.444f587catjava.lang.Object.wait(NativeMethod)-waitingon(mon.sgclient.QueObj)mon.sgclient.SGManager.doIt(SGManager.java:930)-locked(mon.sgclient.QueObj)mon.sgclient.SGManager.doIt(SGManager.java:880),堆栈分析堵塞线程,大量线程在等待某个同步锁,而该同步锁被一个线程占用,则此处属于性能瓶颈,需要优化ExecuteThread:1forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.sql.DriverManager.getConnection(DriverManager.java:158)-waitingtolock(ajava.lang.Class)atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)ExecuteThread:2forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.sql.DriverManager.getConnection(DriverManager.java:158)-waitingtolock(ajava.lang.Class)atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)ExecuteThread:3forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.lang.Object.wait(NativeMethod)-locked(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172),堆栈分析死锁线程,两个线程各自锁住一个同步锁,然后又在等待对方锁住的同步锁的释放。此情况属于系统bug,需要开发人员fix。ExecuteThread:1forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.lang.Object.wait(NativeMethod)-waitingon(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)-locked(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)ExecuteThread:2forqueue:rundaemonprio=1tid=0 x08895958nid=0 x27a6inObject.wait()48afb000.48afb87catjava.lang.Object.wait(NativeMethod)-waitingon(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)-locked(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172),分布式死锁,某些情况下,运行在两个服务器上的两个线程或线程池如果需要互相通讯,则可能发生线程的分布式死锁典型案例:打开weblogic的Session复制功能时,可能导致分布式线程死锁场景:1、两台服务器,互为Session复制备机,并同时承载业务;2、服务器A堵塞,用户Session更新请求进入队列;3、用户刷新页面,用户Session更新请求分发到服务器B;4、服务器A堵塞结束,两服务器同时处理用户Session更新请求;5、两服务器同时锁住自己服务器上的用户Session,然后向对方发起用户Session更新请求,接收到Session复制请求的服务器因为拿不到此Session的同步锁而进入等待状态,从而造成死锁,压力测试,性能测试:检查系统性能是否满足设计要求,找出系统性能瓶颈,并为销售和售前提供系统性能估算依据稳定性测试:检查系统在大压力、大并发下是否能长时间稳定运行破坏性测试:根据系统可能具有的漏洞和瓶颈,模拟攻击者对系统进行攻击,检查系统对各类攻击,常用指标,TPS:TransectionperSecond每秒事务数,因为事务不同而不同,在相同事务时才具有可比性HPS:HitsperSecond每秒请求数,包含所有HTTP请求(页面、图片、css、js等)PPS:PageperSecond每秒页面数平均响应时间:直接影响用户体验TPMC:TransectionperMinuteCount每分钟事务数得到系统的TPS或HPS后,若需要给方案中心提供每请求消耗的TPMC数,要注意两者单位的不一致,系统负荷观察,客户端CPU使用情况磁盘IO情况网络带宽使用情况服务器端CPU使用情况磁盘IO情况网络带宽使用情况观察系统线程堆栈信息WebLogic队列和线程池使用情况GC垃圾回收情况系统错误日志情况,GC1,新生代(Younggeneration):新分配的对象保存在新生代旧生代(Oldgeneration):小回收时还要使用的对象保存在旧生代持久代(Permanentgeneration):class等保存在持久代,一般不用调整大小,以前的应用因为不会动态更新jsp,所以可使用-Xnoclassgc来关闭对持久代的回收以提高系统性能,但pona、max等需要动态更新jsp的系统不能关闭,否则系统会因为持久代空间耗尽而crash。小回收(Minorcollection):回收新生代,耗时少,间隔短大回收(Majorcollection):回收旧生代,耗时多、间隔长,GC2,分配空间越大更大的回收间隔更大的回收时间全量回收时系统会停止响应回收时间过大会导致系统堵塞GC优化原则:最大回收时间在可接受范围(需要考虑用户可接受程度、四层交换的健康检测,尽量控制在5秒以内)内存泄漏的判定:在压力测试前和测试结束并且用户Session全部超时后作一次全量回收(用户Session会占用大量内存,影响评估结果),若发现回收后的内存占用比测试前有明显增加,则可能有内存泄漏使用工具(JRocket或JProbe)作压力测试时的内存分析,找出临时内存使用过多的地方并加以优化)343692.510:GC916952K-812304K(1035520K),0.0273880secs343694.511:GC917264K-812369K(1035520K),0.0270350secs343696.377:GC917

温馨提示

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

评论

0/150

提交评论