压力测试与故障分析课件_第1页
压力测试与故障分析课件_第2页
压力测试与故障分析课件_第3页
压力测试与故障分析课件_第4页
压力测试与故障分析课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

提纲集群相关内容故障定位分析与系统优化压力测试相关内容问题解答提纲集群相关内容1网络拓扑图网络拓扑图2集群集群(Cluster)是一组对外提供相同服务的服务器组集群可以通过软件或硬件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA),提高系统可靠性集群对客户端是透明的,从客户端的角度来看,集群和单独服务器表现一致集群具有可伸缩性,可以根据系统负荷变化情况方便的调整服务器数量集群集群(Cluster)是一组对外提供相同服务的服务器组3四层交换四层交换机的基本功能根据IP和端口转发内外IP转换工作在四层的LB和HALoadBalance分发算法:源地址、最小连接数、轮循等HA机制:基于端口的健康检测工作在七层的LB和HA根据Cookie或URL中的SessionID作分发,保证Session黏性基于脚本的健康检测,可发出HTTP请求并根据HTTP返回码来判断服务器状态(“/Alteon.jsp”即专为Alteon作健康检测用)常见的四层交换机:Alteon、RedWare、F5四层交换四层交换机的基本功能4四层交换的会话保持四层交换的会话保持5Weblogic集群可以通过BEA提供的软件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA)Weblogic集群能通过打开SessionFailOver来保证用户的会话不被丢失使用集群可在部署时减少出错的机会由于集群内的服务器需要相互通讯,所以集群会带来额外的开销,并且会减慢系统的启动速度Weblogic集群可以通过BEA提供的软件实现负载均衡(L6管理与被管管理服务器负责配置和管理被管服务器,不承载业务。被管服务器启动时通过管理服务器获取配置信息并接受管理服务器控制,被管服务器负责承载业务。管理与被管管理服务器负责配置和管理被管服务器,不承载业务。7集群间通讯T3集群内服务器使用T3协议(BEA私有协议,使用)进行点对点的通讯IPMultiCast(IP组播)单播(UniCast)广播(BroadCast)组播(MultiCast) 集群内的服务器通过IPMultiCast来进行一对多的通讯,如:心跳包IPMultiCast地址范围:从到55必须保证集群组播地址的唯一性,否则会导致集群通讯混乱。目前的组播地址规则:237.xxx.xxx.xxx后面几段根据产品和版本变化集群过大会导致集群内通讯堵塞,降低整个集群的性能集群间通讯T38Session什么是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什么是Session9Session容错Session容错的目的是在某主机或应用当机时,或者在负载均衡设备分发错误时,保证用户会话信息不被丢失SessionFailOver种类:NOFailOver:无FailOverIMR:InmemoryReplication在Session复制备机内存复制Cookie:使用客户端Cookie保存Session信息JDBC:使用数据库保存Session信息File:使用文件系统保存Session信息Session容错Session容错的目的是在某主机或应用当10容错方式性能比较容错方式性能比较11Session复制Session复制是把用户会话信息在集群内的Session复制备机上保存一份备份,这样在服务器当机或用户请求被送到错误主机时,Weblogic会从Session复制备机取回备份,从而保证用户会话信息不被丢失Weblogic使用T3私有协议实现Session复制Session复制中的复制组的考虑集群内的每个服务器都可以指定自己所在的复制组和自己的优先复制组若无复制组,则系统随机选择复制组Session复制的主机和备机同时更新Session信息时会导致系统线程死锁Session复制会消耗大量系统性能,并且可能造成系统堵塞,除非业务流程需要,否则不应该打开Session复制Session复制是一种容错措施,系统的正常运行不能依靠Session复制Session复制Session复制是把用户会话信息在集群内12Session复制状况观察Name

State

KnownServers

Primaries

SecondaryDistributions

sso01RUNNINGsso01sso02sso03sso04sso051sso03:333sso05:555sso02RUNNINGsso01sso02sso03sso04sso051sso04:444sso03RUNNINGsso01sso02sso03sso04sso05333sso01:1sso04RUNNINGsso01sso02sso03sso04sso05444sso02:1sso05RUNNINGsso01sso02sso03sso04sso05555sso06SHUTDOWNn/an/an/asso03、sso05优先复制组为sso01Session复制状况观察NameStateKnown13Session复制的注意事项在Session中保存的数据必须可序列化保存在Session中的数据发生变化时,必须显式调用setAttribute方法Session复制会带来额外的性能消耗页面分帧的情况如果页面分为多帧,则多个子页面的请求可能会同时发到服务器,各子页面都会生成Session,为避免在系统生成多个Session,应该在父页面先把Session生成,或者保证子页面中只有一个页面会生成和修改SessionSession复制的注意事项在Session中保存的数据必须14SessionID格式SessionID格式:

{name}={sessionid}!{pjvmid}!{sjvmid}使用Session复制的正常情况:/test.jsp;jid=Dv729vLf!12345678!-87654321?p1=1使用Session复制但备机异常的情况:

/test.jsp;jid=Dv729vLf!12345678!NONE?p1=1未使用Session复制的情况:

/test.jsp;jid=Dv729vLf!12345678?p1=1SessionID格式SessionID格式:15文件句柄数什么是文件句柄每打开一个文件、socket连接、监听一个端口都需要占用一个句柄系统需要多少文件句柄数正常情况下系统文件句柄数在1000左右,大并发系统和系统并发量有关weblogic执行线程数+weblogic队列数+backlog长度+1000+冗余全局文件句柄数和进程文件句柄数使用sar和lsof可以查看系统当前使用的文件句柄数文件句柄数不够会出现什么问题?进程文件句柄数不够会导致进程无法继续监听端口、无法写新的日志文件若系统全局句柄数不够还会导致系统无法telnet,只能到现场重启服务器文件句柄数会消耗系统资源,所以不能过大文件句柄数什么是文件句柄16磁盘缓存如何查看磁盘缓冲使用情况

Linux:top HPUX:kmeminfo如何减少系统磁盘缓存占用系统内存

Linux:核心参数不可调,但系统内存不足时会自动释放

HPUX:核心参数可调但系统内存不足时不能自动释放参数:dbc_max_pct 建议值:10解释:MaxDynamicBufferCacheSizeasPercentofSystemRAM磁盘缓存如何查看磁盘缓冲使用情况17队列与线程池队列与线程池18队列与线程池线程池处理线程数的确定系统每秒需要处理的请求数系统处理请求时的平均响应时间线程池队列长度的确定每个保存在队列中的连接都会占用一个系统文件句柄,所以队列不应太大Backlog的确定系统在作垃圾回收时会停止响应,此时操作系统会将接收到的连接保存在系统的连接队列中,若连接队列满,则系统会直接将连接拒绝掉,所以backlog的最小长度应该等于每秒用户请求数×最大垃圾回收时间队列与线程池线程池处理线程数的确定19数据库使用连接池是为了减少建立连接的消耗,提高性能Pool、MultiPool、DataSouceMultiPool分发算法:HA与LB连接可用性检查多余连接的回收(目前不使用)连接泄漏检测连接池连接数目确定若应用需要频繁访问数据库,则数据库连接池的连接数应该和执行线程数保持一致若只有部分请求需要访问数据库,则数据库连接池连接数可以少于执行线程数(我们的大部分应用属于这种情况)具体连接数的确定应该根据实际使用时连接池中的等待情况和数据库的使用情况来确定数据库使用连接池是为了减少建立连接的消耗,提高性能20故障定位思路1、检查系统日志,包括StartErrorInfo.txt、nohup、server.log2、检查应用系统错误日志3、检查和kernel的交互日志,包括sgclient和sgbiz,观察日志中的超时请求量及sgbiz日志中的kernel响应时间4、利用bakerror脚本作故障现场备份,然后检查备份下来的各类信息故障定位思路1、检查系统日志,包括StartErrorInf21堆栈分析-空闲线程分析线程堆栈的步骤:1、间隔3到5秒,连续作3次ThreadDump;2、使用vi或文本编辑工具查看线程堆栈情况;3、计算各状态线程的数量。正常情况下,大部分线程应该都处于空闲状况。"ExecuteThread:'0'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x56e65d10>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x56e65d10>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-空闲线程分析线程堆栈的步骤:22堆栈分析-繁忙线程正常情况下,会有少量线程处于繁忙状况,从这些繁忙线程的堆栈可以看到一般都是在处理比较耗时的操作,Portal里面一般是在等待kernel返回消息。若发现大量的线程都在等待kernel返回消息,则说明kernel发生堵塞。若发现比较多的线程处于繁忙状态,但又不是在等待kernel返回消息,则说明此处可能有性能瓶颈,需要优化。"ExecuteThread:'142'forqueue:'run'"daemonprio=1tid=0x0854a2f0nid=0x27a6inObject.wait()[444f5000..444f587c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x4fb4b530>(amon.sgclient.QueObj)atmon.sgclient.SGManager.doIt(SGManager.java:930)

-locked<0x4fb4b530>(amon.sgclient.QueObj)atmon.sgclient.SGManager.doIt(SGManager.java:880)堆栈分析-繁忙线程正常情况下,会有少量线程处于繁忙状况,从这23堆栈分析-堵塞线程大量线程在等待某个同步锁,而该同步锁被一个线程占用,则此处属于性能瓶颈,需要优化"ExecuteThread:‘1'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]

atjava.sql.DriverManager.getConnection(DriverManager.java:158)

-waitingtolock<12345>(ajava.lang.Class)

atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)"ExecuteThread:‘2'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]

atjava.sql.DriverManager.getConnection(DriverManager.java:158)

-waitingtolock<12345>(ajava.lang.Class)

atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)"ExecuteThread:‘3'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-locked<12345>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-堵塞线程大量线程在等待某个同步锁,而该同步锁被一个24堆栈分析-死锁线程两个线程各自锁住一个同步锁,然后又在等待对方锁住的同步锁的释放。此情况属于系统bug,需要开发人员fix。"ExecuteThread:‘1'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x12345>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x54321>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)"ExecuteThread:‘2'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x54321>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x12345>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-死锁线程两个线程各自锁住一个同步锁,然后又在等待对25分布式死锁某些情况下,运行在两个服务器上的两个线程或线程池如果需要互相通讯,则可能发生线程的分布式死锁典型案例:打开weblogic的Session复制功能时,可能导致分布式线程死锁场景:1、两台服务器,互为Session复制备机,并同时承载业务;2、服务器A堵塞,用户Session更新请求进入队列;3、用户刷新页面,用户Session更新请求分发到服务器B;4、服务器A堵塞结束,两服务器同时处理用户Session更新请求;5、两服务器同时锁住自己服务器上的用户Session,然后向对方发起用户Session更新请求,接收到Session复制请求的服务器因为拿不到此Session的同步锁而进入等待状态,从而造成死锁分布式死锁某些情况下,运行在两个服务器上的两个线程或线程池如26压力测试性能测试:检查系统性能是否满足设计要求,找出系统性能瓶颈,并为销售和售前提供系统性能估算依据稳定性测试:检查系统在大压力、大并发下是否能长时间稳定运行破坏性测试:根据系统可能具有的漏洞和瓶颈,模拟攻击者对系统进行攻击,检查系统对各类攻击压力测试性能测试:检查系统性能是否满足设计要求,找出系统性能27常用指标TPS:TransectionperSecond每秒事务数,因为事务不同而不同,在相同事务时才具有可比性HPS:HitsperSecond每秒请求数,包含所有HTTP请求(页面、图片、css、js等)PPS:PageperSecond每秒页面数平均响应时间:直接影响用户体验TPMC:TransectionperMinuteCount每分钟事务数得到系统的TPS或HPS后,若需要给方案中心提供每请求消耗的TPMC数,要注意两者单位的不一致常用指标TPS:TransectionperSecond28系统负荷观察客户端CPU使用情况磁盘IO情况网络带宽使用情况服务器端CPU使用情况磁盘IO情况网络带宽使用情况观察系统线程堆栈信息WebLogic队列和线程池使用情况GC垃圾回收情况系统错误日志情况系统负荷观察客户端29GC1新生代(Younggeneration):新分配的对象保存在新生代旧生代(Oldgeneration):小回收时还要使用的对象保存在旧生代持久代(Permanent

generation):class等保存在持久代,一般不用调整大小,以前的应用因为不会动态更新jsp,所以可使用-Xnoclassgc来关闭对持久代的回收以提高系统性能,但pona、max等需要动态更新jsp的系统不能关闭,否则系统会因为持久代空间耗尽而crash。小回收(Minorcollection):回收新生代,耗时少,间隔短大回收(Majorcollection):回收旧生代,耗时多、间隔长GC1新生代(Younggeneration):新分配的对30GC2分配空间越大-》更大的回收间隔-》更大的回收时间全量回收时系统会停止响应回收时间过大会导致系统堵塞GC优化原则:最大回收时间在可接受范围(需要考虑用户可接受程度、四层交换的健康检测,尽量控制在5秒以内)内存泄漏的判定:在压力测试前和测试结束并且用户Session全部超时后作一次全量回收(用户Session会占用大量内存,影响评估结果),若发现回收后的内存占用比测试前有明显增加,则可能有内存泄漏使用工具(JRocket或JProbe)作压力测试时的内存分析,找出临时内存使用过多的地方并加以优化)343692.510:[GC916952K->812304K(1035520K),0.0273880secs]343694.511:[GC917264K->812369K(1035520K),0.0270350secs]343696.377:[GC917329K->812449K(1035520K),0.0266270secs]343698.894:[GC917409K->812625K(1035520K),0.0266130secs]343701.142:[FullGC917585K->302334K(1035520K),2.2056290secs]GC2分配空间越大-》更大的回收间隔-》更大的回31单案例与混合案例混合案例:根据现网实际访问模型各类访问的构成情况构造混合案例,压力结果比较接近现网实际情况,但整理现网访问模型比较麻烦,而且现网访问模型会不断变化,一旦变化则需要重新作压力测试。单案例:针对现网主要的访问类型单独作该案例的性能测试,得到每个案例所消耗的系统资源情况,然后根据现网访问模型用各单案例测试结果按照比例来折算成现网访问所需的系统资源。此方式第一次需要作的测试比较多,但在现网访问模型发生变化时不用重新作压力测试,只需要根据模型重新计算即可。单案例与混合案例混合案例:根据现网实际访问模型各类访问的构成32公司与现网指标公司测试环境从业务数据量级、用户访问模型、外围环境等都比现网简单和理想,所以测试结果会比现网实际结果高现网的海量业务数据和用户数据很难模拟不同访问模型消耗的系统资源也不一致现网除用户正常访问外,还存在各类攻击和恶意请求真实kernel响应延时集群、session复制的消耗现网海量并发用户的情况很难模拟,需要大量测试终端公司与现网指标公司测试环境从业务数据量级、用户访问模型、外围33容量评估容量评估:某系统需要支持1千万用户,如何评估我们的系统是否能支撑?估计活跃用户数,平均每天会有多少用户使用?分析用户使用行为,一个用户每天会有多少次访问?估计忙时系数,一天最忙的一个小时访问量占全天的百分比,一般情况在7到8,有的系统会超过10,需要根据具体系统分析根据忙时系数计算每秒需要处理的事务数若取活跃用户数为10%,每用户每天访问10次,取忙时系数为8%,则此系统每秒需支持的事务数为:1000000*10%*10*8%/3600=22.2TPS容量评估容量评估:某系统需要支持1千万用户,如何评估我们的系34Q&AQ&A35--感谢大家--感谢大家--感谢大家--感谢大家36演讲完毕,谢谢观看!演讲完毕,谢谢观看!37提纲集群相关内容故障定位分析与系统优化压力测试相关内容问题解答提纲集群相关内容38网络拓扑图网络拓扑图39集群集群(Cluster)是一组对外提供相同服务的服务器组集群可以通过软件或硬件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA),提高系统可靠性集群对客户端是透明的,从客户端的角度来看,集群和单独服务器表现一致集群具有可伸缩性,可以根据系统负荷变化情况方便的调整服务器数量集群集群(Cluster)是一组对外提供相同服务的服务器组40四层交换四层交换机的基本功能根据IP和端口转发内外IP转换工作在四层的LB和HALoadBalance分发算法:源地址、最小连接数、轮循等HA机制:基于端口的健康检测工作在七层的LB和HA根据Cookie或URL中的SessionID作分发,保证Session黏性基于脚本的健康检测,可发出HTTP请求并根据HTTP返回码来判断服务器状态(“/Alteon.jsp”即专为Alteon作健康检测用)常见的四层交换机:Alteon、RedWare、F5四层交换四层交换机的基本功能41四层交换的会话保持四层交换的会话保持42Weblogic集群可以通过BEA提供的软件实现负载均衡(LoadBalance,LB)和高可用(HighAvailability,HA)Weblogic集群能通过打开SessionFailOver来保证用户的会话不被丢失使用集群可在部署时减少出错的机会由于集群内的服务器需要相互通讯,所以集群会带来额外的开销,并且会减慢系统的启动速度Weblogic集群可以通过BEA提供的软件实现负载均衡(L43管理与被管管理服务器负责配置和管理被管服务器,不承载业务。被管服务器启动时通过管理服务器获取配置信息并接受管理服务器控制,被管服务器负责承载业务。管理与被管管理服务器负责配置和管理被管服务器,不承载业务。44集群间通讯T3集群内服务器使用T3协议(BEA私有协议,使用)进行点对点的通讯IPMultiCast(IP组播)单播(UniCast)广播(BroadCast)组播(MultiCast) 集群内的服务器通过IPMultiCast来进行一对多的通讯,如:心跳包IPMultiCast地址范围:从到55必须保证集群组播地址的唯一性,否则会导致集群通讯混乱。目前的组播地址规则:237.xxx.xxx.xxx后面几段根据产品和版本变化集群过大会导致集群内通讯堵塞,降低整个集群的性能集群间通讯T345Session什么是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什么是Session46Session容错Session容错的目的是在某主机或应用当机时,或者在负载均衡设备分发错误时,保证用户会话信息不被丢失SessionFailOver种类:NOFailOver:无FailOverIMR:InmemoryReplication在Session复制备机内存复制Cookie:使用客户端Cookie保存Session信息JDBC:使用数据库保存Session信息File:使用文件系统保存Session信息Session容错Session容错的目的是在某主机或应用当47容错方式性能比较容错方式性能比较48Session复制Session复制是把用户会话信息在集群内的Session复制备机上保存一份备份,这样在服务器当机或用户请求被送到错误主机时,Weblogic会从Session复制备机取回备份,从而保证用户会话信息不被丢失Weblogic使用T3私有协议实现Session复制Session复制中的复制组的考虑集群内的每个服务器都可以指定自己所在的复制组和自己的优先复制组若无复制组,则系统随机选择复制组Session复制的主机和备机同时更新Session信息时会导致系统线程死锁Session复制会消耗大量系统性能,并且可能造成系统堵塞,除非业务流程需要,否则不应该打开Session复制Session复制是一种容错措施,系统的正常运行不能依靠Session复制Session复制Session复制是把用户会话信息在集群内49Session复制状况观察Name

State

KnownServers

Primaries

SecondaryDistributions

sso01RUNNINGsso01sso02sso03sso04sso051sso03:333sso05:555sso02RUNNINGsso01sso02sso03sso04sso051sso04:444sso03RUNNINGsso01sso02sso03sso04sso05333sso01:1sso04RUNNINGsso01sso02sso03sso04sso05444sso02:1sso05RUNNINGsso01sso02sso03sso04sso05555sso06SHUTDOWNn/an/an/asso03、sso05优先复制组为sso01Session复制状况观察NameStateKnown50Session复制的注意事项在Session中保存的数据必须可序列化保存在Session中的数据发生变化时,必须显式调用setAttribute方法Session复制会带来额外的性能消耗页面分帧的情况如果页面分为多帧,则多个子页面的请求可能会同时发到服务器,各子页面都会生成Session,为避免在系统生成多个Session,应该在父页面先把Session生成,或者保证子页面中只有一个页面会生成和修改SessionSession复制的注意事项在Session中保存的数据必须51SessionID格式SessionID格式:

{name}={sessionid}!{pjvmid}!{sjvmid}使用Session复制的正常情况:/test.jsp;jid=Dv729vLf!12345678!-87654321?p1=1使用Session复制但备机异常的情况:

/test.jsp;jid=Dv729vLf!12345678!NONE?p1=1未使用Session复制的情况:

/test.jsp;jid=Dv729vLf!12345678?p1=1SessionID格式SessionID格式:52文件句柄数什么是文件句柄每打开一个文件、socket连接、监听一个端口都需要占用一个句柄系统需要多少文件句柄数正常情况下系统文件句柄数在1000左右,大并发系统和系统并发量有关weblogic执行线程数+weblogic队列数+backlog长度+1000+冗余全局文件句柄数和进程文件句柄数使用sar和lsof可以查看系统当前使用的文件句柄数文件句柄数不够会出现什么问题?进程文件句柄数不够会导致进程无法继续监听端口、无法写新的日志文件若系统全局句柄数不够还会导致系统无法telnet,只能到现场重启服务器文件句柄数会消耗系统资源,所以不能过大文件句柄数什么是文件句柄53磁盘缓存如何查看磁盘缓冲使用情况

Linux:top HPUX:kmeminfo如何减少系统磁盘缓存占用系统内存

Linux:核心参数不可调,但系统内存不足时会自动释放

HPUX:核心参数可调但系统内存不足时不能自动释放参数:dbc_max_pct 建议值:10解释:MaxDynamicBufferCacheSizeasPercentofSystemRAM磁盘缓存如何查看磁盘缓冲使用情况54队列与线程池队列与线程池55队列与线程池线程池处理线程数的确定系统每秒需要处理的请求数系统处理请求时的平均响应时间线程池队列长度的确定每个保存在队列中的连接都会占用一个系统文件句柄,所以队列不应太大Backlog的确定系统在作垃圾回收时会停止响应,此时操作系统会将接收到的连接保存在系统的连接队列中,若连接队列满,则系统会直接将连接拒绝掉,所以backlog的最小长度应该等于每秒用户请求数×最大垃圾回收时间队列与线程池线程池处理线程数的确定56数据库使用连接池是为了减少建立连接的消耗,提高性能Pool、MultiPool、DataSouceMultiPool分发算法:HA与LB连接可用性检查多余连接的回收(目前不使用)连接泄漏检测连接池连接数目确定若应用需要频繁访问数据库,则数据库连接池的连接数应该和执行线程数保持一致若只有部分请求需要访问数据库,则数据库连接池连接数可以少于执行线程数(我们的大部分应用属于这种情况)具体连接数的确定应该根据实际使用时连接池中的等待情况和数据库的使用情况来确定数据库使用连接池是为了减少建立连接的消耗,提高性能57故障定位思路1、检查系统日志,包括StartErrorInfo.txt、nohup、server.log2、检查应用系统错误日志3、检查和kernel的交互日志,包括sgclient和sgbiz,观察日志中的超时请求量及sgbiz日志中的kernel响应时间4、利用bakerror脚本作故障现场备份,然后检查备份下来的各类信息故障定位思路1、检查系统日志,包括StartErrorInf58堆栈分析-空闲线程分析线程堆栈的步骤:1、间隔3到5秒,连续作3次ThreadDump;2、使用vi或文本编辑工具查看线程堆栈情况;3、计算各状态线程的数量。正常情况下,大部分线程应该都处于空闲状况。"ExecuteThread:'0'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x56e65d10>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x56e65d10>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-空闲线程分析线程堆栈的步骤:59堆栈分析-繁忙线程正常情况下,会有少量线程处于繁忙状况,从这些繁忙线程的堆栈可以看到一般都是在处理比较耗时的操作,Portal里面一般是在等待kernel返回消息。若发现大量的线程都在等待kernel返回消息,则说明kernel发生堵塞。若发现比较多的线程处于繁忙状态,但又不是在等待kernel返回消息,则说明此处可能有性能瓶颈,需要优化。"ExecuteThread:'142'forqueue:'run'"daemonprio=1tid=0x0854a2f0nid=0x27a6inObject.wait()[444f5000..444f587c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x4fb4b530>(amon.sgclient.QueObj)atmon.sgclient.SGManager.doIt(SGManager.java:930)

-locked<0x4fb4b530>(amon.sgclient.QueObj)atmon.sgclient.SGManager.doIt(SGManager.java:880)堆栈分析-繁忙线程正常情况下,会有少量线程处于繁忙状况,从这60堆栈分析-堵塞线程大量线程在等待某个同步锁,而该同步锁被一个线程占用,则此处属于性能瓶颈,需要优化"ExecuteThread:‘1'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]

atjava.sql.DriverManager.getConnection(DriverManager.java:158)

-waitingtolock<12345>(ajava.lang.Class)

atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)"ExecuteThread:‘2'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]

atjava.sql.DriverManager.getConnection(DriverManager.java:158)

-waitingtolock<12345>(ajava.lang.Class)

atcom.aspire.getHSqlConnection(DataSourceFactory.java:79)"ExecuteThread:‘3'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-locked<12345>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-堵塞线程大量线程在等待某个同步锁,而该同步锁被一个61堆栈分析-死锁线程两个线程各自锁住一个同步锁,然后又在等待对方锁住的同步锁的释放。此情况属于系统bug,需要开发人员fix。"ExecuteThread:‘1'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x12345>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x54321>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)"ExecuteThread:‘2'forqueue:'run'"daemonprio=1tid=0x08895958nid=0x27a6inObject.wait()[48afb000..48afb87c]atjava.lang.Object.wait(NativeMethod)

-waitingon<0x54321>(aweblogic.kernel.ExecuteThread)atjava.lang.Object.wait(Object.java:429)atweblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:153)

-locked<0x12345>(aweblogic.kernel.ExecuteThread)atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:172)堆栈分析-死锁线程两个线程各自锁住一个同步锁,然后又在等待对62分布式死锁某些情况下,运行在两个服务器上的两个线程或线程池如果需要互相通讯,则可能发生线程的分布式死锁典型案例:打开weblogic的Session复制功能时,可能导致分布式线程死锁场景:1、两台服务器,互为Session复制备机,并同时承载业务;2、服务器A堵塞,用户Session更新请求进入队列;3、用户刷新页面,用户Session更新请求分发到服务器B;4、服务器A堵塞结束,两服务器同时处理用户Session更新请求;5、两服务器同时锁住自己服务器上的用户Session,然后向对方发起用户Session更新请求,接收到Session复制请求的服务器因为拿不到此Session的同步锁而进入等待状态,从而造成死锁分布式死锁某些情况下,运行在两个服务器上的两个线程或线程池如63压力测试性能测试:检查系统性能是否满足设计要求,找出系统性能瓶颈,并为销售和售前提供系统性能估算依据稳定性测试:检查系统在大压力、大并发下是否能长时间稳定运行破坏性测试:根据系统可能具有的漏洞和瓶颈,模拟攻击者对系统进行攻击,检查系统对各类攻击压力测试性能测试:检查系统性能是否满足设计要求,找出系统性能64常用指标TPS:TransectionperSecond每秒事务数,因为事务不同而不同,在相同事务时才具有可比性HPS:Hitsper

温馨提示

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

评论

0/150

提交评论