《性能测试诊断分析与优化课件.ppt》由会员分享,可在线阅读,更多相关《性能测试诊断分析与优化课件.ppt(116页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、激发个人潜能燃点企业动力性能测试诊断分析与优化陈能技嘉为IT培训学院培训讲师介绍陈能技()11年软件测试与质量管理经验著作:软件测试技术大全.NET软件测试实战技术大全QTP自动化测试最佳实践软件自动化测试成功之道性能测试诊断分析与优化培训课堂的注意事项培训中积极、主动不仅使您获得更多的收获,也使培训讲师能有的放矢、保持激情。持之以恒、集中精力,您收获的将不仅是知识;请您记得将手机调至震动状态或关机,以免影响您的同学。培训后填写课程反馈表删除桌面临时文件关机培训后事项填写课程反馈表删除桌面临时文件关机目 录1.性能监控方法2.性能诊断分析与优化3.性能测试新兴技术介绍一、性能监控方法操作系统层
2、性能监控Web服务器性能监控中间件服务器性能监控1、操作系统层性能监控CPU性能监控内存性能监控磁盘IO性能监控网络性能监控开源网络性能监控工具的应用使用Spotlight监控操作系统CPU性能监控查看CPU信息:cat/proc/cpuinfoTopVmstat23Dstat-cip1Mpstat-PALL1Sar110Pidstat-p25Top使用方式:top-ddelayqcSsinb说明:即时显示process的动态d:改变显示的更新速度,或是在交谈式指令列(interactivecommand)按sq:没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最
3、高的优先序执行c:切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S:累积模式,会将己完成或消失的子行程(deadchildprocess)的CPUtime累积起来s:安全模式,将交谈式指令取消,避免潜在的危机i:不显示任何闲置(idle)或无用(zombie)的行程n:更新的次数,完成后将会退出topb:批次档模式,搭配n参数一起使用,可以用来将top的结果输出到档案内范例:显示更新十次后退出;top-n10将更新显示二次的结果输入到名称为top.log的档案里:top-n2-btop.logVmstatr表示运行队列的大小b表示由于IO等待而block的线程
4、数量in表示中断的数量cs表示上下文切换的数量us表示用户CPU时间sys表示系统CPU时间wa表示由于IO等待而是CPU处于idle状态的时间id表示CPU处于idle状态的总时间DSTATdstat可以给出每一个设备产生的中断数设备名和设备号的关系可以参考文件/proc/interruptsMpstatmpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:#mpstatPALL1Linux2.4.21-20.ELsmp(localhost.localdomain)05/23/200605:17:31PMCPU%user%nice%system%idleintr/s0
5、5:17:32PMall0.000.003.1996.5313.2705:17:32PM00.000.000.00100.000.0005:17:32PM11.120.0012.7386.1513.2705:17:32PM20.000.000.00100.000.0005:17:32PM30.000.000.00100.000.00sar%user列显示了用户进程消耗的CPU时间百分比。%nice列显示了运行正常进程所消耗的CPU时间百分比。%system列显示了系统进程消耗的CPU时间百分比。%iowait列显示了IO等待所占用的CPU时间百分比%steal列显示了在内存相对紧张的环境下pa
6、gein强制对不同的页面进行的steal操作。%idle列显示了CPU处在空闲状态的时间百分比。sar25/每隔2秒,显示5次,CPU使用的情况sar支持保存成两种格式的文件,一种是文本文件,一种是二进制文件(只有通过sar自己的命令才能查看)sar110data.txtsar15-odata/每隔1秒,写入5次,将CPU使用的数据写入二进制文件data中。sar-fdata/查看data文件Pidstat监视某个进程的CPU使用情况1.通过ps命令找到相应进程的PID:ps-e2.使用pidstat命令监视进程,详细用法见:http:/pagesperso-orange.fr/sebasti
7、en.godard/man_pidstat.htmlpidstat25每隔2秒,显示5次,所有活动进程的CPU使用情况pidstat-p313225每隔2秒,显示5次,PID为1643的进程的CPU使用情况显示pidstat-p313225-r每隔2秒,显示5次,PID为1643的进程的内存使用情况显示内存性能监控查看内存信息:cat/proc/meminfoFreemVmstat210TopPsfree$free-mtotalusedfreesharedbufferscachedMem:1002769232062421-/+buffers/cache:286715Swap:115301153
8、第一部分Mem行:total内存总数:1002Mused已经使用的内存数:769Mfree空闲的内存数:232Mshared当前已经废弃不用,总是0buffersBuffer缓存内存数:62McachedPage缓存内存数:421M关系:total(1002M)=used(769M)+free(232M)第二部分(-/+buffers/cache):(-buffers/cache)used内存数:286M(指的第一部分Mem行中的used-buffers-cached)(+buffers/cache)free内存数:715M(指的第一部分Mem行中的free+buffers+cached)可见
9、-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。vmstatvmstatmemoryswpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。free列表示当前空闲的物理内存数量(以k为单位)buff列表示bufferscache的内存数量,一般对块设备的读写才需要缓冲。cache列表示pagecached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的
10、文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。swapsi列表示由磁盘调入内存,也就是内存进入内存交换区的数量。so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。监控单个进程占用内存的情况top-d1然后shift+m(Sortbymemoryusage)Psaux|grepHoldMemoryMaintop-b-n1-p21642|tail-2|head-1|awkprint$5VIRT=SWAP+RESVIRT进程使用的虚拟内存总量,单位kbSWAP进程使用的虚拟内
11、存中,被换出的大小,单位kbRES进程使用的、未被换出的物理内存大小,单位kb磁盘性能监控df-hlTparted-lVmstatiostat-d23sar-d23Iotoppidstatiodumpiostatiotoppidstatpidstat-d1pidstat-Ctest_io-t-d1iodumpwgethttp:/ true;do sleep 1;dmesg-c;done|perl iodumpC#CaughtSIGINT.TASKPIDTOTALREADWRITEDIRTYDEVICESfirefox4450453825142870sda4,sda3kjournald21005
12、5105510sda4firefox2845218518500sda4kjournald782590590sda3pdflush31300300sda4,sda3syslogd24852020sda3firefox284142200sda4,sda3firefox284131100sda4firefox284101100sda4firefox283071100sda4firefox284511100sda4网络性能监控pingNetstat-iSar-nDEV13Sar-nSOCK13ifTop、ipTrafifTop开源性能监控工具的应用Cacti、NagiosNmonCactiCacti是
13、一套基于PHP,MySQL,SNMP及RRDTool开发的监控工具,可以监控主机的状态和负载情况,添加相应的模板后,可以用来监控Apache、MySQL等服务器的运行状态。NmonNmon是IBM提供的开源监控工具,可对AIX和Linux系统资源进行监控,可收集系统资源使用情况并输出到特定文件,并可利用Excel分析工具进行数据统计分析。使用Spotlight监控操作系统2、WEB服务器性能监控IHS性能监控方法HTTP连接状态监控Web服务器吞吐量监控IHS性能监控打开server-status监控状态监控页面打开server-status监控LoadModulestatus_modulem
14、odules/ApacheModuleStatus.dll#Allowserverstatusreports,withtheURLofhttp:/servername/server-status#Changethe.your_tomatchyourdomaintoenable.SetHandlerserver-statusorderdeny,allowdenyfromallallowfrom127.0.0.1状态监控页面Scoreboard Key:_WaitingforConnection,SStartingup,RReadingRequest,WSendingReply,KKeepaliv
15、e(read),DDNSLookup,LLogging,GGracefullyfinishing,.OpenslotwithnocurrentprocessWeb服务器网络连接监控Linux下实时检测httpd连接数watch-n 1-d pgrep httpd|wc-l“查看TCP并发连接情况:netstat-n|awk/tcp/+S$NFENDfor(ainS)printa,SaWeb服务器网络连接监控3、中间件服务器性能监控WAS性能监控WAS自带监控工具的使用perfServletApp的使用方法LoadRunner监控WAS使用AppDynamics监控WebSphereJVM性能监
16、控方法及工具GC日志监控分析ThreadDumpJVM远程监控JDBC性能监控WAS性能漏斗模型WAS性能监控的方面Session线程池JDBC连接JVM性能WAS性能监控的方法和工具WAS自带性能监控工具的使用perfServletApp的使用方法LoadRunner监控WASWAS自带性能监控工具的使用WAS自带性能监控工具的使用用TPV监控JVM发现内存泄漏现象perfServletApp的使用方法部署PerfServletApp.ear到WebSphere目录下perfServletApp的使用方法LoadRunner监控WASJVM性能监控通用方法JConsole实时监控JVMGC日
17、志分析HeapDumpThreadDumpJVM性能监控通用方法-JConsole实时监控JVMJVM性能监控通用方法-GC日志分析打开WASGC日志打开WASGC日志Java和进程管理-进程定义-Java虚拟机-详细垃圾回收(保存配置后重新启动服务生效)Java和进程管理-进程定义-Java虚拟机-运行时-详细垃圾回收(确认后立即生效)在通用JVM参数输入框中添加:-Xverbosegclog:gc.logJVMGC日志的保存目录WASHOME/profiles/yourprofile/logs/yourserver/native_stderr.log和native_stdout.logC:
18、WebSphereAppServerprofilesAppSrv01gc.logGC日志分析工具IBMSupportAssistant-GarbageCollectionandMemoryVisualizerIBM Pattern Modeling and Analysis Tool(PMAT)GCViewerJVM性能监控通用方法-HeapDumpheapdump文件是一个二进制文件,它保存了某一时刻jvm堆中对象情况,这种文件需要相应的工具进行分析,例如heapanalyzer。这个文件最重要的作用就是分析系统是否存在内存溢出的情况,通过heapanalyzer可以很简单地分析出溢出的位置
19、。产生产生WAS Heap Dump的方法的方法JVM性能监控通用方法-ThreadDump线程监控和分析工具Threaddump提供了当前活动的线程的快照.它提供了JVM中所有Java线程的栈跟踪信息产产生生WAS Thread Dump的方法的方法JconsoleVisualVMJProfilerThreadDumpAnalyzerIBM Thread and Monitor Dump Analyzer for JavaJVM远程监控JstatdJconsolevisualvmJprofile中间件性能监控与分析工具HPDiagnosticsJProfilerJProbeYourKitAp
20、pDynamicsDomainHealthJavamelodyJAMONAppDynamicsWAS的Session监控与分析ActiveCount:正在处理请求的Session数量LiveCount:目前缓存在内存中的本地Session的数量WAS线程数监控分析ActiveCount:处于激活状态的线程数。PoolSize:线程池中的平均线程数。PercentMaxed:所有线程在使用的时间的平均百分比。DeclaredthreadHungCount:挂起的线程数。WAS的JDBC连接池监控WaitingThreadCount:当前等待连接的线程。FaultCount:在连接池中出现错误(例
21、如超时)的数量。PercentUsed:当前连接池中被使用的平均百分比。JDBC性能分析P6spy+sqlprofilerJDbMonitorJAMONJProfiler监控JDBC二、性能诊断分析与优化操作系统层性能分析与优化HIS服务器配置优化中间件性能分析与优化JVM性能分析使用JConsoleJavaVisualVM监控和分析WebSphere的JVM性能JVM参数调整与优化利用JProfiler分析定位Java内存泄漏问题Java代码线程死锁问题分析与定位JSPServlet性能优化方法操作系统层性能分析与优化Linux系统性能诊断操作系统性能调优Linux系统性能诊断影响性能因素影
22、响性能因素评判判标准准好坏糟糕CPUuser%+sys%=90%内存内存SwapIn(si)0SwapOut(so)0Per CPU with 10page/sMore Swap In&SwapOut磁磁盘iowait%=50%CPU对于每一个CPU来说运行队列运行队列不要超过3,例如,如果是双核CPU就不要超过6;如果CPU在满负荷运行,应该符合下列分布,a)User Time:65%70%b)System Time:30%35%c)Idle:0%5%对于上下文切换上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。内存(-/+buffers/cac
23、he)的free和usedSwap(si、so)内存分析案例上面是一个频繁读写交换区的例子,可以观察到以下几点:物理可用内存 free基本没什么显著变化,swapd逐步增加当脏页达到10的时候就开始大量使用 swap,free目前的值约等于256MB*10%=2.56MBbuff稳步减少说明系统知道内存不够了,kwapd正在从 buff那里借用部分内存kswapd持续把脏页面写到 swap交换区(so),从 swapd逐渐增加看出确实如此IO同一时间进行大量的I/O操作在这种情况时我们会发现CPU的wa时间百分比会上升,证明系统的idle时间大部分都是在等待I/O操作。从这个输出我们可以看到C
24、PU有50%的时间都在等待I/O操作,我们还可以看到系统的bi值很大,证明系统有大量的I/O请求将磁盘内容读入内存。IO将top的输出通过faults进行排序。我们可以看到vmware产生最多的pagefaults。也就是说它进行了大量的IO操作。IO任何I/O操作都需要一定的时间,而且这些时间对于硬盘来说是确定的,它包含磁盘旋转的延时RD(rotationdelay)和磁头搜索时间DS(diskseek)。RD由磁盘转速(RPM)决定。RD是磁盘旋转一周所需时间的一半。如RPM为10000(1分钟转1万次).RPS=RPM/60=166(1秒转166次)。1/166=0.0006=6ms(磁
25、盘旋转一周要6毫秒)。RD=6ms/2=3ms磁盘平均搜索时间是3ms,数据传输的平均延时是2ms,这样一次I/O操作的平均时间是:3ms+3ms+2ms=8msIOPS=1000/8=125 这块磁盘的每秒IO数(IOPS)为125。所以对于10000RPM的磁盘来说它所能承受的IO操作在IOPS在120150之间。如果系统的I/O请求超过这个值,就会使磁盘成为系统的瓶颈。连续I/Ovs.随机I/O连续I/O常常出现在企业级数据库这样的应用中,需要连续的读取大量数据。这种系统的性能依靠它读取和移动数据的大小和快慢。我们用iostat来监控,会发现rKB/s和wKB/s会很高。Device:r
26、rqm/swrqm/s r/s w/s rsec/swsec/s rkB/swkB/s avgrq-szavgqu-szawait svctm%util/dev/sda0.0012891.430.00105.710.00 106080.000.0053040.001003.461099.433442.4326.49280.00从输出我们看到w/s=105,wKB/s=53040.所以53040/105=505KBperI/O.连续I/Ovs.随机I/O对于随机I/O的系统来说性能的关注点不在搜传输数据的大小和速度,而是在磁盘的IOPS。这类系统的I/O请求比较小但是数量很大,如Web服务器和M
27、ail服务器。他们的性能主要依赖每秒钟可处理的请求数:Device:rrqm/swrqm/s r/s w/s rsec/swsec/s rkB/s wkB/s avgrq-szavgqu-szawaitsvctm%util/dev/sda0.00 633.67 3.06102.3124.495281.6312.242640.82288.8973.67 113.89 27.2250.00从输出我们看到w/s=102,wKB/s=2640.所以2640/102=23KBperI/O.因此对于连续I/O系统来说我们要关注系统读取大量数据的能力即KBperrequest.对于随机I/O系统我们注重IO
28、PS值.操作系统性能调优系统安装优化系统安装优化RAIDSWAP分区系统安装后的初步调整优化系统安装后的初步调整优化检查系统是否正常关闭不需要的服务对TCP/IP网络参数进行调整内核参数优内核参数优化化针对Web服务器的网络参数优化针对数据库服务器的内核参数优化IHS服务器配置优化MPM对对Apache性能的影性能的影响响影响性能的配置影响性能的配置并发线程相关的设置并发线程相关的设置日志对性能的影日志对性能的影响响压缩mod_cache中间件性能分析与优化IHS优化WASSession优化内存中最大会话量Session超时WAS线程池优化WASJDBC连接池优化连接超时最大连接数最小连接数J
29、VM性能分析与优化性能分析与优化应用层攻击应用层攻击数据库服务器数据库服务器JDBC数据库连接典型问题分析某电网公司企业网站标准化系统在100个并发用户压力下进行内网网站首页访问登录操作,发现该系统的应用服务器和数据库服务器连接异常,大量出现错误,测试软件报错信息如下:通过对分析,发现部分连接参数设置太小,对连接参数进行调整后,测试组对系统进行了再次测试,基本不存在连接失败的情况。应用层攻击应用层攻击某电网公司人力资源系统员工名册查询无法做压力测试,响应超时的问题,主要是请求的sql太长了com.sophia.hr.modules.employee.external.impl.Employee
30、ServiceImpl.java类修改了方法empListSQL4Info方法再次测试,响应时间明显改善。JDBC数据库连接典型问题分析应用层攻击应用层攻击某电商网站JDBC数据库连接典型问题分析Causedby:java.sql.SQLException:Wearealreadyintheprocessofmaking11connectionsandthenumberofsimultaneousbuildshasbeenthrottledto10JVM性能分析JVM垃圾回收对性能的影响吞吐量、GC停顿JVM内存泄漏诊断线程问题诊断JVM堆大小对垃圾回收、系统吞吐量的影响GC策略对系统性能的影
31、响JVM的堆JVM年轻代与年老代MinorGC的过程FullGCFullGC对性能的影响jstat-gcpid可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是younggc的次数,younggc的时间,fullgc的次数,fullgc的时间,gc的总时间。GC日志人肉分析WASGC日志分析工具用PMAT分析GC日志java-Xmx512m-jarga414.jarGCViewerWASGC日志分析案例WASGC日志分析案例可以看到FullGC非常多,占所有pause时间比达到65.9%,这是有问题的,GC应该尽可能在年轻代完成,而不是到年老代JVM堆大小对垃圾回收、系统吞吐量的
32、影响案例案例-PlantsByWebSphereJConsole远程监控WASJProfiler查看GCActivity(垃圾回收器的活动占用整体时间的百分比)案例某电网公司可靠性系统JVM内存不足、频繁GC、服务器CPU忙JVM参数调整与优化JVM堆参数设置GC参数设置GC策略对系统性能的影响新生代串行收集器老年代串行收集器并行收集器新生代并行回收收集器老年代并行回收收集器CMS(ConcurrentMarkSweep)收集器-Xgcpolicy:optthruput-Xgcpolicy:optavgpause-Xgcpolicy:gencon-Xgcpolicy:balanced案例案例
33、PlantsByWebSphereJava代码性能问题诊断分析与优化Java代码性能分析JSPServlet性能分析与优化JDBC性能分析与优化JProfiler等性能分析工具的应用Java代码性能分析代码执行效率CPU使用内存使用IO使用线程锁JAVA代码执行效率监控分析JAVACPU使用监控分析查看java进程:jps确认java进程CPU性能:pidstat-p-u13进一步查看线程CPU性能,定位到CPU高消耗的线程ID:pidstat-p13-u-t根据定位到的线程ID,使用jstack导出线程堆栈进行验证:jstack-l/tmp/t.txt在导出的线程堆栈中查找引起高CPU消耗的
34、线程ID(nid),需要从十六进制转换为10进制,从而定位到哪个线程的Java代码执行导致占用大量CPUJAVA内存使用监控分析JProfiler性能分析工具的应用案例演练-Java内存泄漏检测TestMemJAVAI/O使用监控分析iostat-dx3jpspidstat-p-d-t13jstack-l/tmp/t.txtJava线程锁监控分析Jstack监控JAVA线程死锁jpsjstack-l1.txt查找输出结果定位死锁WAS线程DumpLinux下命令行启动WAS,Kill-3/opt/IBM/WebSphere/AppServer/profiles/AppSrv01Idle线程线程
35、:一个已经准备好接受请求的线程,但是没有和插件或者客户端建立连接 Keep-Alive线程线程:是一个已经准备好接受请求的线程,并且已经和插件或者客户端建立连接 正在接受请求的线程正在接受请求的线程:是一个线程正在读取request的内容或者头部WAS线程Dump分析工具IBMThreadandMonitorDumpAnalyzerforJavajava-Xmx500m-jarjca101.jarJSPServlet性能分析与优化JSP、Servlet常见性能问题分析与优化工具AppDynamics、JProfilerJAMONJSP、Servlet常见性能问题分析与优化页面包含页面包含Pag
36、e SessionJavaBean的生命周期的生命周期Session过期时间过期时间init()方法与缓存方法与缓存压缩输出压缩输出三、性能测试新兴技术介绍开源性能压力测试工具介绍云性能测试服务介绍端到端性能测试与性能监控方案开源性能压力测试工具介绍早期:Jmeter、TheGrinderTsungGatlingTsunghttp:/tsung.erlang-projects.org/Jabber/XMPP协议90万并发jabber用户(使用4个节点的tsung集群)(3xSunV240+1SunV440)10万并发用户(使用3个结点tsung集群)(CPU800MHz)HTTPandHTTP
37、S协议12万并发用户(使用4个结点的tsung集群)该测试平台达到每秒3000个请求1000万并发用户,(使用75结点的tsung集群,)并发超过100万个请求目前可以用来测试HTTP,WebDAV,SOAP,PostgreSQL,MySQL,LDAP,andJabber/XMPPGatlingGatling是一款基于Scala开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥有以下特点:支持AkkaActors和AsyncIO,从而能达到很高
38、的性能支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析支持支持DSL脚本,从而使测试脚本更易开发与维护脚本,从而使测试脚本更易开发与维护支持录制并生成测试脚本,从而可以方便的生成测试脚本支持导入HAR(HttpArchive)并生成测试脚本支持Maven,Eclipse,IntelliJ等,以便于开发支持Jenkins,以便于进行持续集成支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持云性能测试SOASTAGomezNeoLoad的云测试方案端到端性能测试与性能监控方案Q&AQ&A提问及答疑培训后事项填写课程反馈表删除桌面临时文件关机感谢您参与此培训!您的意见与建议对我们非常重要。请您填写反馈表。嘉为IT培训学院激发个人潜能 燃点企业动力谢谢!激发个人潜能燃点企业动力陈能技