性能测试专题详细分析

性能测试专题详细分析
性能测试专题详细分析

性能测试专题分析

撰写人:王井滨

部门:**性能测试组

日期:2011/9/13

软件版本号:1.0

保密级:保密

修订记录

1.专题一性能测试流程

1)性能需求调研

交易选择原则如下

?用户量大,用户操作频率高,有高峰期特征,数据量大,数据关联复杂,计算逻辑

复杂。

?数据操作类型覆盖:查询(模糊查询,非索引查询,多关联查询,多条件查询),

新增,修改,计算。由于系统删除功能有限且操作量小,不进行删除操作的性能测

试。

2)测试环境准备

3)测试策略

首先执行批量处理性能测试,可以获得联机性能测试的大部分数据,然后调整或补充数据,进行联机性能测试,最后进行稳定性测试。

为测试系统的性能是否可以通过提高服务器配置或增加服务器数量而得到提升,首先进行基准测试,然后调整服务器的配置或数量,进行可扩展性测试。

4)测试计划

详见测试计划模板

1)系统简介

2)测试需求

3)测试环境

4)测试组织

5)测试风险

6)测试时机

7)测试策略

8)测试场景

9)测试实施

10)交付物

5)测试用例、测试脚本

参考28_JCB卡非功能测试的测试脚本和测试场景

6)执行测试、

压力测试;

负载测试;

疲劳强度测试;

7)统计分析测试结果

LR analysis

8)测试报告

Word、Excel、PPT

2.专题二 LoadRunner使用1)银行项目常用协议

HTTP/HTML: HTML-Based、URL-Based

JAVA: Eclipse编写开发脚本调用实际业务,LR里Action调用该脚本来实现并发设置WINDOWS SOCKETS:报文发送和接收

2)脚本开发及调试

参数化:select next row和update value on的交叉选择;

常用函数:lr_eval_string(),lr_save_string(),lr_output_message()等;

C语言函数:strcat(),strcmp()等;

关联:自动关联、手动关联

web_reg_save_param(),lr_save_param();

3)场景配置

单一业务场景并发:基准测试;

混合业务场景并发:按用户数量分;按业务百分比分;

3 专题三应用服务器监控

3.1 UNIX

3.1.1 性能监控-VMSTAT

vmstat命令用来获得有关进程、虚存、页面交换空间及CPU活动的信息。这些信息反映了系统的负载情况。vmstat首次运行时显示自系统启动开始的各项统计信息,之后运行vmstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

有关进程的信息有:

r-->在运行队列中等待的进程数

b-->在等待io的进程数

w-->可以进入运行队列但被替换的进程

有关内存的信息有:

avm :使用的页面数。

fre:空闲队列中的页面数。

swap-->现时可用的交换内存(k表示)

有关页面交换空间的信息有:

re:在指定时间间隔内每秒要求收回的页面数。

po:在指定时间间隔内换入到页面交换空间的页面数。

pi:由页面交换空间换出的页面数。

fr:在指定时间间隔内释放的页面数。

sr:在指定时间间隔内检查的页面数(以确定该页面是否可以释放)。

cy:按时钟算法每秒扫描的页面数。

mf--》非严重错误的页面

de--》提前读入的页面中的未命中数

disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

有关故障的信息有:

in:在指定时间内的每秒中断次数。

sy:在指定时间内每秒系统调用次数。

cs:在指定时间内每秒上下文切换的次数。

in--》设备中断

sy--》系统中断

有关CPU的信息有:

us:在指定时间间隔内CPU在用户态的利用率。

sy:在指定时间间隔内CPU在核心态的利用率。

id:在指定时间间隔内CPU空闲时间比。

wa:在指定时间间隔内CPU因为等待I/O而空闲的时间比。

cs--》用户进程使用的时间

sy--》系统进程使用的时间

id--》cpu空闲的时间

vmstat 可以用来确定一个系统的工作是受限于CPU还是受限于内存:如果CPU的sy和us 值相加的百分比接近100%,或者运行队列(r) 中等待的进程数总是不等于 0,则该系统受限于CPU;如果pi、po的值总是不等于0,则该系统受限于内存。

vmstat运用举例:

vmstat –f:显示系统中的子进程数。

vmstat –s:显示系统中不同的事件。

vmstat –i:显示系统的中断数。

vmstat hdisk0 hdisk1:显示hdisk0 、hdisk1的使用情况。

vmstat 1 10:每隔一秒显示一次系统的运行状况,共显示10次。

3.1.2性能监控-IOSTAT

iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

语法:

iostat [ -t ] [ interval [ count ] ]

interval指每次统计间隔的时间;

count指按照这个时间间隔统计的次数。

3.1.3 top

3.2 Linux

3.2.1 找到最耗CPU的java线程

1 ps命令

命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间。

2 top命令

命令:top -Hp pid

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

3.2.1.1参数说明

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

p通过指定监控进程ID来仅仅监控某个进程的状态。

q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S指定累计模式

s使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i使top不显示任何闲置或者僵死进程。

c显示整个命令行而不只是显示命令名

3.2.1.2其他命令

top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

Ctrl+L擦除并且重写屏幕。

h或者?显示帮助画面,给出一些简短的命令总结说明。

k终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结

束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序。

r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

S 切换到累计模式。

s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

f或者F从当前显示中添加或者删除项目。

o或者O改变显示项目的顺序。

l 切换显示平均负载和启动时间信息。

m切换显示内存信息。

t 切换显示进程和CPU状态信息。

c 切换显示命令名称和完整命令行。

M根据驻留内存大小进行排序。

P 根据CPU使用百分比大小进行排序。

T根据时间/累计时间进行排序。

W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法

3.2.2判断I/O瓶颈

1 mpstat命令

命令:mpstat -P ALL 1 1000

注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈

2 iostat命令

命令: iostat -m -x 1 1000

同样你可以观察对应的CPU中的%iowait数据,除此之外iostat还提供了一些更详细的I/O 状态数据,比如比较重要的有:

avgqu-sz : The average queue length of the requests that were issued to the device. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解)

await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一个I/O操作从wait到完成的总时间)

svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。判断是否瓶颈时,这两个参数不是主要的

r/s w/s 和 rMB/s wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标

3 pid命令

命令:pidstat -p pid -u -d -t -w -h 1 1000

相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS 等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。

ubuntu下,可以通过sudo apt-get install sysstat进行安装。

4 sar命令

命令:sar -x pid 1 1000

sar的功能可以覆盖mpstat,iostat的相关功能。

5 dstat命令

命令:dstat -y --tcp 1 1000

通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat 去看

其他命令

● netstat -natp:查看对应的网络链接,关注下Recv-Q,Send-Q,State。

● lsof -p pid:查找对应pid的文件句柄

● lsof -i: 80 :查找对应端口被哪个进程占用

● lsof /tmp/1.txt:查找对应文件被哪个进程占用

● tcpdump / wireshark:抓包分析工具

● jstat / jmap / jstack / jps 等一系列的java监控命令

4 专题四数据库监控

4.1 SQL Server数据库

1 SQLServer资源监控中指标缓存点击率(Cache Hit Ratio),该值越高越好。如果持续低于80%,应考虑增加内存。

2 如果Full Scans/sec(全表扫描/秒)计数器显示的值比1或2高,则应分析你的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。

3 Number of Deadlocks/sec(死锁的数量/秒):死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。

4 Lock Requests/sec(锁请求/秒),通过优化查询来减少读取次数,可以减少该计数器的值。4.2 Oracle数据库

4.2.1 Oracle性能优化

Oracle9i的性能优化除了调整kernal之外就是主要对Oracle启动文件的调整,即调整SGA 的参数。注意,不同操作系统不同位数的机器最优的参数不是一样的,这里主要有windows 和unix之分,32位和64位之分。

首先需要调大进程数和游标数,一般默认的值对实际应用来说都比较小,比如说,进程数可以调到300,游标数可以调到500。

其次,看一个经验公式: OS 使用内存+ SGA + session*(sort_area_size + hash_area_size +2M)<0.7RAM,通常认为此时的SGA比较合理。这里sort_area_size为64k, hash_area_size为128k(当排序多的时候需要增大sort_area_size,按调整后的值计算),session表示最大并发进程数,假设100个。假如1G内存的机器,OS占用200M,PGA占用200M左右,那么SGA可以设为400-500M,如果2G内存可以1G给SGA,8G可以5G给SGA。不过对于32位数据库来说,通常最多只能使用1.7G内存。

然后,SGA内参数设置的基本原则是:data buffer 通常可以尽可能的大,

shared_pool_size 要适度,log_buffer 通常大到几百K到1M就差不多。具体的:data buffer 1G内存可以设置500M,2G设为1.2G,8G可设为5G 。shared_pool_size不易过大,通常应该控制在200M--300M,如果使用了大量的存储过程,可以根据SGA的值增大到500M,如果增大后命中率得不到提高,则增加是无益的。具体的:1G内存可以设置100M,2G设为150M,8G可设为300M。如不使用java,java_pool_size 10-20M即可。large_pool_size 如果不设置MTS,在20M -30M 即可,假如设置 MTS,可以考虑为 session * (sort_area_size + 2M)。

最后,关于内存的设置可根据statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch 等view信息来考虑微调。

4.2.2 Oracle的其他调整

为了Oracle高效率的运行,除了上面提到的内存因素之外,还有就是需要良好的数据库设计:表、视图、索引和日志的合理规划和建立。I/O的性能也是重要因素,应尽量减少页交换和页分配。此外,就是改善检查点的效率

4.2.3 Oracle的监控指标

1 如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。

快存(共享SQL区)和数据字典快存的命中率:

select(sum(pins-reloads))/sum(pins) from v$librarycache;

select(sum(gets-getmisses))/sum(gets) from v$rowcache;

自由内存:select * from v$sgastat where name=’free memory’;

2 如果数据的缓存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS参数的值(单位:块)。

缓冲区高速缓存命中率:

select name,value from v$sysstat where name in (’db block gets’,

‘consistent gets’,'physical reads’) ;

Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))

3 如果日志缓冲区申请的值较大,则应加大LOG_BUFFER参数的值。

日志缓冲区的申请情况:

select name,value from v$sysstat where name = ‘redo log space requests’ ;

4 如果内存排序命中率小于0.95,则应加大SORT_AREA_SIZE以避免磁盘排序。

内存排序命中率:

select round((100*b.value)/decode((a.value+b.value), 0, 1,

(a.value+b.value)), 2)from v$sysstat a, v$sysstat b where https://www.360docs.net/doc/8313985569.html,=’sorts (disk)’ and https://www.360docs.net/doc/8313985569.html,=’sorts (memory)’

5 专题五中间件监控

5.1 Weblogic

web Logic Server的核心组件由监听线程,套接字复用器和可执行线程的执行队列组成。当服务器由监听线程接收到连接请求后,将对它的连接控制权交给等待接收请求的套接字复用器。然后套接字复用器读取离开套接字的请求,并将此请求及相关安全信息或事务处理环境一起置入适当的执行队列中(一般为默认的执行队列)。当有一个请求出现在执行队列中时,就会有一个空闲的执行线程从该队列中取走发来的该请求,并返回应答,然后等待下一次请求。因此要提高web Logic的性能,就必须从调整核心组件性能出发。

与web Logic特性相关的技巧有:使用自动生成主键,web Logic为Oracle和Sqlserver两种数据库的CMP提供了自动生成主键功能,节约了Entity Bean产生主键的时间,同时设key-cache-size不小于100;web Logic管理事务性能更好,使用容器管理,而不是Bean管理事务;web Logic提供了为CMP动态查询和批量插入功能,对性能也有很大帮助。

5.2 Websphere

5.2.1 线程池

线程池使服务器的组件能重用线程以消除在运行时创建新线程的消耗,包括时间和资源。缺省值:最小10 最大50

建议值:最小25(Linux)最大50(Unix)

上限:最大1000

5.2.2 数据库连接池

5.2.2.1 缺省值

最小连接数 1

最大连接数10

连接超时180秒

空闲超时1800秒

孤立超时1800秒

语句高速缓存大小10

自动连接清楚

5.2.2.2 连接池大小影响

1 最小池大小

较小的池在需求较低时需要较小的开销,因为保持打开的数据库连接较少。当需求较高时,因为如果池中所有其他的连接都在使用当中,则创建新的连接,所以第一个应用程序经历较慢的响应。

2 最大池大小

如果已经达到了最大连接数并且所有连接都在使用中,则其他连接请求会最多等待指定为连接超时的秒数。最大池大小会影响程序的性能。较大的池在需求较高时需要更多的开销,因为在需求高峰时有更多的连接打开。这些连接一直存留,直到空闲而脱离池。如果最大池较小,则在高峰期会发生更多的等待时间或可能有连接超时错误。

5.2.2.3 判断瓶颈方法

当使用Tivoli Performance Viewer工具监控JMS时,某个连接工厂的连接池大小和空闲连接池大小指的是该工厂管理的使用connection数和空闲connection数。而某个connection 的连接池大小和空闲连接池大小指的是该connection管理的活动会话数和空闲会话数。在WAS管理控制台上看到连接工厂对应2个属性:连接池和会话池。连接池的最大连接数表示一个连接工厂内最多可拥有的连接数,会话池的最大连接数表示一个连接内可拥有的最大会话数。而“JMS连接工厂”节点中显示的连接池和空闲连接池的数值只是下面所有叶子节点的数值之和,本身并没有实际意义。

6 专题六调优策略

6.1 服务器调优

6.1.1 Linux 调优基本策略(ulimit)

ulimit -a 用来显示当前的各种用户进程限制。

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个: ulimit -u 10000

对于需要做许多socket 连接并使它们处于打开状态的Java 应用程序而言,

最好通过使用ulimit -n xx 修改每个进程可打开的文件数,缺省值是1024。

ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024

其他建议设置成无限制(unlimited)的一些重要设置是:

数据段长度:ulimit -d unlimited

最大内存大小:ulimit -m unlimited

堆栈大小:ulimit -s unlimited

CPU 时间:ulimit -t unlimited

虚拟内存:ulimit -v unlimited

暂时地,适用于通过ulimit 命令登录shell 会话期间。

永久地,通过将一个相应的ulimit 语句添加到由登录shell 读取的文件中,即特定于shell 的用户资源文件,如:

1)、解除Linux 系统的最大进程数和最大文件打开数限制:

vi /etc/security/limits.conf

# 添加如下的行

* soft noproc 11000

* hard noproc 11000

* soft nofile 4100

* hard nofile 4100

说明:* 代表针对所有用户

noproc 是代表最大进程数

nofile 是代表最大文件打开数

2)、让SSH 接受Login 程式的登入,方便在ssh 客户端查看ulimit -a 资源限制:

a、vi /etc/ssh/sshd_config

把UserLogin 的值改为yes,并把# 注释去掉

b、重启sshd 服务:

/etc/init.d/sshd restart

3)、修改所有linux 用户的环境变量文件:

vi /etc/profile

ulimit -u 10000

ulimit -n 4096

ulimit -d unlimited

ulimit -m unlimited

ulimit -s unlimited

ulimit -t unlimited

ulimit -v unlimited

/**************************************

有时候在程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a 可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。

修改2个文件。

1./etc/security/limits.conf

vi /etc/security/limits.conf

加上:

* soft nofile 8192

* hard nofile 20480

2./etc/pam.d/login

session required /lib/security/pam_limits.so

**********

另外确保/etc/pam.d/system-auth文件有下面内容

session required /lib/security/$ISA/pam_limits.so

这一行确保系统会执行这个限制。

***********

3.一般用户的.bash_profile

#ulimit -n 1024

重新登陆ok

6.1.2 Unix系统调优

影响UNIX系统性能的主要因素有三个:系统硬件、文件系统与核心参数。

一、系统硬件

系统硬件资源的改善有利于操作系统性能的提高。比如,CPU主频的提高或者CPU的档次提高,系统性能自然就提高了;内存方面,将内存增大,一般都能使应用软件运行速度加快,其中,有无高速缓存(Cache),影响也较明显;对于多线程的应用(如数据库Informix 的操作),采用对称多处理器服务器,能使性能得到明显提高。经测试,双CPU系统性能比单CPU系统性能可提高80%。又如,硬盘的容量以及硬盘控制器的类型也会影响UNIX的读写I/O性能。举个例子,采用fast&wide SCSI-Ⅱ类型的硬盘比采用fast SCSI-Ⅱ的更好;采用磁盘阵列比非磁盘阵列更好。另外,对于系统I/O方面,最好选用智能的网卡或多用户卡,由于这些控制卡有自己的处理器和缓存,可以减少UNIX系统资源的开销,这样UNIX

就可腾出资源供应用软件使用。总之,系统硬件是影响UNIX性能的主要因素,用户应根据特定应用的需求与资金的情况合理地选购所需要的系统硬件。

二、文件系统

文件系统是UNIX操作系统单独的一块,它由文件、目录以及定位和访问他们所需要的信息组成,可以简单地认为文件系统是文件和目录组织起来的结构。每个UNIX系统在主硬盘上至少有一个根文件系统/root。当主硬盘容量足够大,为了保护数据和更方便地维护系统,最好将主硬盘划分为多个文件系统,即通常所说的/u文件系统。同时,通过安装另外的硬盘可附加更多的文件系统,从而扩展系统的存储空间。如在我们的清算系统中,就有二、三个硬盘,并建立了两个文件系统:/root和/home,后者专门用于安装数据库及应用软件。

在安装/root文件系统过程中,需要确定交换区(swap area)的大小。交换区至少应和内存一样大,也可根据以下的公式来估算:

用户数*最大进程长度(512K)+大应用程序数*512KB

通常对于大型数据库应用,交换区的大小一般在内存小于512M时,取内存的两倍,如果内存大于1G取与实际内存相等。

如果在系统运行期间需要调整系统的交换区,可以使用系统命令swap来增加删除交换区的大小,具体使用方法可以参看UNIX系统的帮助文档。

采用分离的文件系统有若干优点:1对于一个小的文件系统来说,操作系统只需检索少量的节点和数据块,文件存取速度比较快;2检查和清理两个小的文件系统比一个大的文件系统要节省较多时间;3在一个系统的崩溃过程中,一个较少活动的文件系统要比一个活动的文件系统所经受的破坏小;4此外,分离的文件系统后援容易。这就是我们使用的很多数据库及应用软件安装在分离的文件系统的主要原因。

另外,维护文件系统的完整性是操作系统工作的组成部份。UNIX系统在一些结构中存在一定的冗余,因此具有很强的纠错能力。UNIX使用fsck程序一般可修复被损坏的文件系统。任何损坏一般只影响一、两个文件。只有极少的情况,才会造成整个文件系统的瘫痪。但是,作为系统管理员或操作员,需要遵守以下几个原则,以维护文件系统的完整性,1在安装文件系统前一定要检查它;2在未拆卸文件系统前不能物理地搬走它;3在关闭文件系统和拆卸文件系统前必须使用sync命令,它可将高速缓存中的数据写回磁盘;4定期做文件系统的后援。

文件系统面临的另一个问题是空闲空间可能不够。每个文件系统中至少保证有15%的空间是空闲的,UNIX系统才能运行得最好。如果文件系统的空闲空间少于15%,则系统操作通常变得比较迟钝。因此,特别是对于系统管理员来说,应该有规律地检查所有安装的文件系统的空闲空间总数,并提醒用户使他们不用的文件的目录空闲。当空闲空间不够时,应找出并删除临时文件和core文件,作文件系统的后援,如有必要增加另一个文件系统。

三、核心参数

在建立UNIX系统时,核心参数的协调如何是影响应用系统的重要因素。第一次建立系统时,系统会自动地为适应大多数应用产生一个确省的核心参数配置。但是,用户应该针对具体应用的模式和特性,调整核心参数配置,从而提高性能以适应特殊的应用。系统的核心控制着大量经常使用的、释放和重复使用的资源(包括缓冲区、表项及其它可定义的值,以管理特殊的资源,比如信号灯的数量等)。一般存在下列原因时,需对系统资源进行重新分配:

●安装了附加的硬件存储器。

相关主题
相关文档
最新文档