性能测试诊断分析与优化_第1页
性能测试诊断分析与优化_第2页
性能测试诊断分析与优化_第3页
性能测试诊断分析与优化_第4页
性能测试诊断分析与优化_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

1、性能测试诊断分析与优化1培训讲师介绍陈能技 () 11年软件测试与质量管理经验著作:软件测试技术大全.NET软件测试实战技术大全QTP自动化测试最佳实践软件自动化测试成功之道性能测试诊断分析与优化2培训课堂的注意事项培训中积极、主动不仅使您获得更多的收获,也使培训讲师能有的放矢、保持激情。持之以恒、集中精力,您收获的将不仅是知识;请您记得将手机调至震动状态或关机,以免影响您的同学。培训后填写课程反馈表删除桌面临时文件关机3培训后事项填写课程反馈表删除桌面临时文件关机4性能监控方法性能诊断分析与优化性能测试新兴技术介绍5一、性能监控方法操作系统层性能监控Web服务器性能监控中间件服务器性能监控6

2、1、操作系统层性能监控CPU性能监控 内存性能监控 磁盘IO性能监控 网络性能监控 开源网络性能监控工具的应用 使用Spotlight监控操作系统7CPU性能监控查看CPU信息:cat /proc/cpuinfoTopVmstat 2 3Dstat -cip 1Mpstat -P ALL 1Sar 1 10Pidstat -p 2 58Top使用方式:top - d delay q c S s i n b说明:即时显示process的动态d :改变显示的更新速度,或是在交谈式指令列( interactive command)按sq :没有任何延迟的显示速度,如果使用者是有superuser的权

3、限,则top将会以最高的优先序执行c :切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S :累积模式,会将己完成或消失的子行程( dead child process )的CPU time累积起来s :安全模式,将交谈式指令取消,避免潜在的危机i :不显示任何闲置(idle)或无用(zombie)的行程n :更新的次数,完成后将会退出topb :批次档模式,搭配n参数一起使用,可以用来将top的结果输出到档案内范例:显示更新十次后退出;top -n 10将更新显示二次的结果输入到名称为top.log的档案里:top -n 2 -b top.log9Vmstat

4、r表示运行队列的大小b表示由于IO等待而block的线程数量in表示中断的数量cs表示上下文切换的数量us表示用户CPU时间sys表示系统CPU时间wa表示由于IO等待而是CPU处于idle状态的时间id表示CPU处于idle状态的总时间10DSTATdstat可以给出每一个设备产生的中断数设备名和设备号的关系可以参考文件 /proc/interrupts11Mpstatmpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:# mpstat P ALL 1Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/200605

5、:17:31 PM CPU %user %nice %system %idle intr/s05:17:32 PM all 0.00 0.00 3.19 96.53 13.2705:17:32 PM 0 0.00 0.00 0.00 100.00 0.0005:17:32 PM 1 1.12 0.00 12.73 86.15 13.2705:17:32 PM 2 0.00 0.00 0.00 100.00 0.0005:17:32 PM 3 0.00 0.00 0.00 100.00 0.0012sar%user列显示了用户进程消耗的CPU时间百分比。%nice列显示了运行正常进程所消耗的CP

6、U时间百分比。%system列显示了系统进程消耗的CPU时间百分比。%iowait列显示了IO等待所占用的CPU时间百分比%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。%idle列显示了CPU处在空闲状态的时间百分比。sar 2 5 / 每隔2秒,显示5次,CPU使用的情况 sar支持保存成两种格式的文件,一种是文本文件,一种是二进制文件(只有通过sar自己的命令才能查看)sar 1 10 data.txtsar 1 5 - o data / 每隔1秒,写入5次,将CPU使用的数据写入二进制文件data中。 sar - f data / 查看dat

7、a文件13Pidstat监视某个进程的CPU使用情况 1.通过ps命令找到相应进程的PID: ps - e 2.使用pidstat命令监视进程,详细用法见: pidstat 2 5 每隔2秒,显示5次,所有活动进程的CPU 使用情况 pidstat - p 3132 2 5 每隔2秒,显示5次,PID为1643的进程的CPU使用情况显示 pidstat - p 3132 2 5 - r每隔2秒,显示5次,PID为1643的进程的内存使用情况显示 14内存性能监控查看内存信息:cat /proc/meminfoFree mVmstat 2 10TopPs15free$ free -m total

8、 used free shared buffers cachedMem: 1002 769 232 0 62 421-/+ buffers/cache: 286 715Swap: 1153 0 1153第一部分Mem行:total 内存总数: 1002Mused 已经使用的内存数: 769Mfree 空闲的内存数: 232Mshared 当前已经废弃不用,总是0buffers Buffer缓存内存数: 62Mcached Page缓存内存数:421M关系:total(1002M) = used(769M) + free(232M)第二部分(-/+ buffers/cache):(-buffer

9、s/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。16vmstat17vmstatmemoryswpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。free列表示当

10、前空闲的物理内存数量(以k为单位)buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。swapsi 列表示由磁盘调入内存,也就是内存进入内存交换区的数量。so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。18监控单个进程占用内存的情况top -

11、d 1然后shift + m(Sort by memory usage)Ps aux | grep HoldMemoryMaintop -b -n1 -p 21642 | tail -2|head -1|awk print $5VIRT=SVIRT 进程使用的虚拟内存总量,单位kbSWAP 进程使用的虚拟内存中,被换出的大小,单位kbRES 进程使用的、未被换出的物理内存大小,单位kb19磁盘性能监控df -hlTparted -lVmstatiostat -d 2 3sar -d 2 3Iotoppidstatiodump20iostat21iotop22pidstatpidstat -d

12、1pidstat -C test_io -t -d 123iodumpwget echo 1 /proc/sys/vm/block_dumprootkanga:# while true; do sleep 1; dmesg -c; done | perl iodumpC# Caught SIGINT.TASK PID TOTAL READ WRITE DIRTY DEVICESfirefox 4450 4538 251 4287 0 sda4, sda3kjournald 2100 551 0 551 0 sda4firefox 28452 185 185 0 0 sda4kjournald

13、782 59 0 59 0 sda3pdflush 31 30 0 30 0 sda4, sda3syslogd 2485 2 0 2 0 sda3firefox 28414 2 2 0 0 sda4, sda3firefox 28413 1 1 0 0 sda4firefox 28410 1 1 0 0 sda4firefox 28307 1 1 0 0 sda4firefox 28451 1 1 0 0 sda424网络性能监控 pingNetstat -iSar -n DEV 1 3Sar -n SOCK 1 3ifTop、ipTraf25ifTop26开源性能监控工具的应用 Cacti

14、、NagiosNmon27CactiCacti是一套基于PHP,MySQL,SNMP及 RRDTool开发的监控工具,可以监控主机的状态和负载情况,添加相应的模板后,可以用来监控 Apache、MySQL 等服务器的运行状态。28NmonNmon是IBM提供的开源监控工具,可对AIX和Linux系统资源进行监控,可收集系统资源使用情况并输出到特定文件,并可利用Excel分析工具进行数据统计分析。29使用Spotlight监控操作系统 302、Web服务器性能监控IHS性能监控方法 HTTP连接状态监控 Web服务器吞吐量监控 31IHS性能监控打开server-status监控状态监控页面32

15、打开server-status监控LoadModule status_module modules/ApacheModuleStatus.dll# Allow server status reports, with the URL of # Change the .your_ to match your domain to enable. SetHandler server-status order deny,allow deny from all allow from 33状态监控页面Scoreboard Key: _ Waiting for Connection, S Starting u

16、p, R Reading Request, W Sending Reply, K Keepalive (read), D DNS Lookup, L Logging, G Gracefully finishing, . Open slot with no current process 34Web服务器网络连接监控Linux下实时检测httpd连接数watch -n 1 -d pgrep httpd|wc -l“查看TCP并发连接情况:netstat -n | awk /tcp/ +S$NF END for(a in S) print a, Sa 35Web服务器网络连接监控363、中间件服务

17、器性能监控WAS性能监控 WAS自带监控工具的使用 perfServletApp的使用方法 LoadRunner监控WAS 使用AppDynamics监控WebSphere JVM性能监控方法及工具 GC日志监控分析 Thread Dump JVM远程监控 JDBC性能监控37WAS性能漏斗模型38WAS性能监控的方面Session线程池JDBC连接JVM性能39WAS性能监控的方法和工具WAS自带性能监控工具的使用perfServletApp的使用方法LoadRunner监控WAS40WAS自带性能监控工具的使用41WAS自带性能监控工具的使用42用TPV监控JVM发现内存泄漏现象43per

18、fServletApp的使用方法部署PerfServletApp.ear到WebSphere目录下44perfServletApp的使用方法45LoadRunner监控WAS46JVM性能监控通用方法JConsole实时监控JVMGC日志分析Heap DumpThread Dump47JVM性能监控通用方法-JConsole实时监控JVM48JVM性能监控通用方法-GC日志分析49打开 WAS GC日志打开WAS GC日志Java和进程管理-进程定义-Java虚拟机-详细垃圾回收(保存配置后重新启动服务生效)Java和进程管理-进程定义-Java虚拟机-运行时-详细垃圾回收(确认后立即生效)在

19、通用JVM参数输入框中添加:-Xverbosegclog:gc.logJVM GC日志的保存目录WASHOME/pronative_stderr.log 和 native_stdout.logC:WebSphereAppServerprofilesAppSrv01gc.log50GC日志分析工具IBM Support Assistant - Garbage Collection and Memory VisualizerIBM Pattern Modeling and Analysis Tool(PMAT)GCViewer51JVM性能监控通用方法- Heap Dumpheapdump文件是一

20、个二进制文件,它保存了某一时刻jvm堆中对象情况,这种文件需要相应的工具进行分析,例如 heapanalyzer。这个文件最重要的作用就是分析系统是否存在内存溢出的情况,通过heapanalyzer可以很简单地分析出溢出的位置。产生WAS Heap Dump的方法52JVM性能监控通用方法-Thread Dump53线程监控和分析工具Thread dump提供了当前活动的线程的快照.它提供了JVM中所有Java线程的栈跟踪信息产生WAS Thread Dump的方法Jconsole VisualVM JProfilerThread Dump AnalyzerIBM Thread and Mon

21、itor Dump Analyzer for Java54JVM远程监控JstatdJconsolevisualvmJprofile55中间件性能监控与分析工具HP Diagnostics JProfiler JProbe YourKit AppDynamicsDomainHealth Javamelody JAMON56AppDynamics57WAS的Session监控与分析ActiveCount:正在处理请求的Session数量LiveCount:目前缓存在内存中的本地Session的数量58WAS线程数监控分析ActiveCount: 处于激活状态的线程数。PoolSize: 线程池中

22、的平均线程数。PercentMaxed: 所有线程在使用的时间的平均百分比。DeclaredthreadHungCount: 挂起的线程数。59WAS的JDBC连接池监控WaitingThreadCount: 当前等待连接的线程。FaultCount: 在连接池中出现错误(例如超时)的数量。PercentUsed: 当前连接池中被使用的平均百分比。60JDBC性能分析P6spy + sqlprofilerJDbMonitorJAMON61JProfiler监控JDBC62二、性能诊断分析与优化操作系统层性能分析与优化 HIS服务器配置优化 中间件性能分析与优化 JVM性能分析 使用JConso

23、leJava VisualVM监控和分析WebSphere的JVM性能 JVM参数调整与优化 利用JProfiler分析定位Java内存泄漏问题Java代码线程死锁问题分析与定位 JSPServlet性能优化方法63操作系统层性能分析与优化 Linux系统性能诊断操作系统性能调优64Linux系统性能诊断影响性能因素评判标准好坏糟糕CPUuser% + sys%=90%内存S(si)0S(so)0Per CPU with 10 page/sMore S & S磁盘iowait % = 50%65CPU对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;如果CPU在满负荷

24、运行,应该符合下列分布,a) User Time:65%70%b) System Time:30%35%c) Idle:0%5%对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。66内存(-/+ buffers/cache)的free和usedSwap(si 、so)67内存分析案例上面是一个频繁读写交换区的例子,可以观察到以下几点:物理可用内存 free 基本没什么显著变化,swapd 逐步增加当脏页达到10的时候就开始大量使用 swap,free目前的值约等于256MB*10%=2.56MBbuff 稳步减少说明系统知道内存不够了,kwapd

25、 正在从 buff 那里借用部分内存kswapd 持续把脏页面写到 swap 交换区(so),从 swapd 逐渐增加看出确实如此68IO同一时间进行大量的I/O操作在这种情况时我们会发现CPU的wa时间百分比会上升,证明系统的idle时间大部分都是在等待I/O操作。从这个输出我们可以看到CPU有50%的时间都在等待I/O操作,我们还可以看到系统的bi值很大,证明系统有大量的I/O请求将磁盘内容读入内存。69IO将top的输出通过faults进行排序。我们可以看到vmware产生最多的page faults。也就是说它进行了大量的IO操作。70IO任何I/O操作都需要一定的时间,而且这些时间对

26、于硬盘来说是确定的,它包含磁盘旋转的延时RD(rotation delay)和磁头搜索时间DS(disk seek)。RD由磁盘转速(RPM)决定。RD是磁盘旋转一周所需时间的一半。如RPM为10000(1分钟转1万次). RPS=RPM/60=166(1秒转166次)。1/166=0.0006=6ms (磁盘旋转一周要6毫秒)。RD=6ms/2=3ms磁盘平均搜索时间是3ms,数据传输的平均延时是2ms,这样一次I/O操作的平均时间是:3ms+3ms+2ms=8msIOPS=1000/8=125 这块磁盘的每秒IO数(IOPS)为125。所以对于10000RPM的磁盘来说它所能承受的IO操作

27、在IOPS在120150之间。如果系统的I/O请求超过这个值,就会使磁盘成为系统的瓶颈。71连续I/O vs.随机I/O连续I/O常常出现在企业级数据库这样的应用中,需要连续的读取大量数据。这种系统的性能依靠它读取和移动数据的大小和快慢。我们用iostat来监控,会发现rKB/s和wKB/s会很高。Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util/dev/sda 0.00 12891.43 0.00 105.71 0.00 106080.00 0.00 5304

28、0.00 1003.46 1099.43 3442.43 26.49 280.00从输出我们看到w/s=105,wKB/s=53040.所以53040/105=505KB per I/O.72连续I/O vs.随机I/O对于随机I/O的系统来说性能的关注点不在搜传输数据的大小和速度,而是在磁盘的IOPS。这类系统的I/O请求比较小但是数量很大,如Web服务器和Mail服务器。他们的性能主要依赖每秒钟可处理的请求数:Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

29、/dev/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00从输出我们看到w/s=102,wKB/s=2640.所以2640/102=23KB per I/O.因此对于连续I/O系统来说我们要关注系统读取大量数据的能力即KB per request.对于随机I/O系统我们注重IOPS值.73操作系统性能调优系统安装优化RAIDSWAP分区系统安装后的初步调整优化检查系统是否正常关闭不需要的服务对TCP/IP网络参数进行调整内核参数优化针对Web服务器的网络参数优化针对数据

30、库服务器的内核参数优化74IHS服务器配置优化MPM对Apache性能的影响影响性能的配置并发线程相关的设置日志对性能的影响压缩mod_cache75中间件性能分析与优化IHS优化WAS Session优化内存中最大会话量Session超时WAS线程池优化WAS JDBC连接池优化连接超时最大连接数最小连接数JVM性能分析与优化76应用层攻击数据库服务器JDBC数据库连接典型问题分析某电网公司企业网站标准化系统在100个并发用户压力下进行内网网站首页访问登录操作,发现该系统的应用服务器和数据库服务器连接异常,大量出现错误,测试软件报错信息如下:通过对分析,发现部分连接参数设置太小,对连接参数进

31、行调整后,测试组对系统进行了再次测试,基本不存在连接失败的情况。77应用层攻击某电网公司人力资源系统员工名册查询无法做压力测试,响应超时的问题,主要是请求的sql太长了com.sophia.hr.modules.employee.external.impl.EmployeeServiceImpl.java类修改了方法empListSQL4Info方法再次测试,响应时间明显改善。JDBC数据库连接典型问题分析78应用层攻击某电商网站JDBC数据库连接典型问题分析Caused by: java.sql.SQLException: We are already in the process of m

32、aking 11 connections and the number of simultaneous builds has been throttled to 1079JVM性能分析JVM垃圾回收对性能的影响吞吐量、GC停顿JVM内存泄漏诊断线程问题诊断JVM堆大小对垃圾回收、系统吞吐量的影响GC策略对系统性能的影响80JVM的堆81JVM年轻代与年老代82Minor GC的过程83Full GCFull GC对性能的影响jstat -gc pid可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full g

33、c的时间,gc的总时间。84GC日志人肉分析85WAS GC日志分析工具用PMAT分析GC日志java -Xmx512m -jar ga414.jarGCViewer86WAS GC 日志分析 案例87WAS GC 日志分析 案例可以看到Full GC非常多,占所有pause时间比达到65.9%,这是有问题的,GC应该尽可能在年轻代完成,而不是到年老代88JVM堆大小对垃圾回收、系统吞吐量的影响案例 - PlantsByWebSphereJConsole远程监控WASJProfiler查看GC Activity(垃圾回收器的活动占用整体时间的百分比)89案例某电网公司可靠性系统JVM内存不足、

34、频繁GC、服务器CPU忙90JVM参数调整与优化JVM堆参数设置GC参数设置91GC策略对系统性能的影响新生代串行收集器老年代串行收集器并行收集器新生代并行回收收集器老年代并行回收收集器CMS(Concurrent Mark Sweep)收集器-Xgcpolicy:optthruput-Xgcpolicy:optavgpause-Xgcpolicy:gencon-Xgcpolicy:balanced案例 PlantsByWebSphere92Java代码性能问题诊断分析与优化Java代码性能分析JSPServlet性能分析与优化JDBC性能分析与优化JProfiler等性能分析工具的应用93J

35、ava代码性能分析代码执行效率CPU使用内存使用IO使用线程锁94JAVA代码执行效率监控分析95JAVA CPU使用监控分析查看java进程: jps确认java进程CPU性能: pidstat -p -u 1 3进一步查看线程CPU性能,定位到CPU高消耗的线程ID: pidstat -p 1 3 -u -t根据定位到的线程ID,使用jstack导出线程堆栈进行验证: jstack -l /tmp/t.txt 在导出的线程堆栈中查找引起高CPU消耗的线程ID(nid),需要从十六进制转换为10进制,从而定位到哪个线程的Java代码执行导致占用大量CPU96JAVA内存使用监控分析97JProfiler性能分析工具的应用98案例演练-Java内存泄漏检测TestMem99JAVA I/O使用监控分析iostat -dx 3jpspidstat -p -d -t 1 3jstack -l /tmp/t.txt100Java线程锁监控分析101Jstack监控JAVA线程死锁jpsjstack -l 1.txt查找输出结果定位死锁102WAS线程DumpLinux下命令行启动WAS, Kill -3 /opt/IBM/WebS

温馨提示

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

评论

0/150

提交评论