1、1.2测试方法测试工具及脚本:应用ORM工具(Hibernate)作为辅助工具,对应用系统的主要参数(例如线程数、线程与落地方的对应关系、每次捞saf记录数、落地方的可承受接收记录数)等等进行管理,及对运行log进行正确行分析,计算压力测试结果,计算性能图绘制数据等等。另外,监控服务器的CpuIdle、Memory、DiskIO等重要数据则由perfmon.Sh脚本完成。测试方法:通过工具webMethods Developer启动/关闭saf线程,直到应用系统满足压力测试要求的循环次数为止。1.3压力测试场景压力测试场景主要分为两种方式:单场景:50万saf数据中,在未处理数据不同比例中,应
2、用系统的吞吐能力。50万saf数据中,不同的线程数量,应用系统的吞吐能力。混合场景:50万saf数据中,在未处理数据不同比例与不同的线程数量中,应用系统的吞吐能力。1.4测试系统环境配置服务器环境如下:服务器操作系统:HP-UX 11.11服务器IP:JDK版本:JDK 1.4.1 PA2.0测试环境是:中心: 服 务 器: 用 户: cmcbadm 系统目录: csc:/home/cmcbadm及/opt/webMethods webMethods端口: 5555 数 据 库: 配 置: jdbc:oracle:thin: & user=cmcbadmCSN1: wm_sn1 csn1:/h
3、ome/wm_sn1及/opt/webMethods 6666 user=csn1CSN2: wm_sn2 csn2:/home/wm_sn2及/opt/webMethods 8888 user=csn21.5参考资料存储转发机制优化概要设计_一级BOSS抗容功能规格说明书存储转发机制优化系统测试方案及案例.doc2压力测试场景一2.1场景一特征saf数据有1000条,很少,线程有3个,每个线程只对应与一个落地方。本场景的测试意义更多是验证功能的正确性,例如验证saf存储转发是否满足三个原则?线程名与落地方的对应关系是否正确?线程每次循环取saf记录数是否正确?线程循环间隔时间是否正确?线程睡
4、眠时间是否自适应?等等(详见,为其它真正的压力测试场景测试做好基础工作。本场景是在启动sc、sn1、sn2应用后进行测试。2.2测试数据2.2.1线程信息表线程标识间隔时间(ms)每次捞数线程15000100线程2线程3注释:共3个线程,循环间隔时间5000ms,每次捞saf数据记录100条2.2.2线程与落地方关系表落地方机构码落地方当前接收能力(条/次)落地方最大2101302201602501901.共3个机构,占总机构(31个)的10%,其中机构码8888是特殊机构,是中心应用日月结数据2.每个线程大约管理1个机构的saf数据发送3.落地方的接收能力是一个随机数,在30条/次,60条/
5、次,90条/次三种能力的其中之一2.2.3saf数据关系节点数Saf总记录未处理数已处理数间隔时间中心捞数/次线程数每线程处理的省每省承受10%的省(3省)10005s130/60/901.saf总记录数1000,未处理的02.1000未处理的数据平均散落到3个省中,平均大约300条/省3.每条saf记录的发送优先级别在4,5,6三个优先级别的其中之一2.3测试步骤1开始2关闭saf线程update SAF_DISPATCHERS set STATUS=1;3删除测试日志:rm /tmp/testlog.log*4启动Cpu、Mem、Disk监控程序/tmp/perfmon.sh5启动saf线
6、程update SAF_DISPATCHERS set STATUS=0;通过工具webMethods Developer启动saf线程6观察测试日志ls l /tmp/testlog.log*,共有8个文件(每个线程单独有一个文件)ls l /tmp/*.stat,共有4个文件,分别是:cmcbtst2_cpu.stat(Cpu活动记录,每隔5s记录一次)cmcbtst2_mem.stat(Memory活动记录,每隔5s记录一次)cmcbtst2_disk.stat(Disk活动记录,每隔5s记录一次)cmcbtst2_is.stat(java进程活动记录,每隔5s记录一次)7循环观察ls
7、l /tmp/testlog.log*,直到循环处理saf数据810次为止8关闭saf线程通过工具webMethods Developer观察,直到8个线程均退出为止9关闭Cpu、Mem、Disk监控程序【Ctrl】 【c】10ftp测试日志把测试日志ftp到本地PC测试日志有:/tmp/testlog.log*,共有8个文件(每个线程单独有一个文件)/tmp/cmcbtst2_cpu.stat(Cpu活动记录,每隔5s记录一次)/tmp/cmcbtst2_mem.stat(Memory活动记录,每隔5s记录一次)/tmp/cmcbtst2_disk.stat(Disk活动记录,每隔5s记录一
8、次)/tmp/cmcbtst2_is.stat(java进程活动记录,每隔5s记录一次)11运行本地的测试日志拆分、分析程序程序:HibernateTest1.java作用:根据多线程存储转发运行日志testlog.logxxx(xxx是线程名)进行拆分解析,并得到运行过程中的重要数据12结束注释:本压力测试主要测试从几十万级的saf数据中捞出需要发送数据记录的能力,因此为突出重点,简化了系统环境,即把程序中发送语句临时注释掉(不发送)。2.4测试结果2.4.1测试日志和脚本1).(参见压力测试场景一测试日志.rar)2).(参见压力测试日志解释程序)HibernateTest1.java2.
9、4.2基本测试结果主要检查项主要检查点结果三个原则优先级高的先发OK同级时间优先按照落地方承受能力发送线程名与落地方的对应关系线程名与落地方的完全对应线程每次循环取saf记录数记录数正确线程循环间隔时间间隔时间正确线程睡眠时间若T2-T1=T,则告警(须调整间隔时长),继续执行1。否则Sleep(T- (T2-T1)落地方与线程同一个落地方与线程唯一对应错误:可以不唯一对应2.4.3支撑数据和测试结果表线程每次捞saf数量落地方接收能力压力测试项压力测试结果捞次数/睡次数49/49最少/最大/平均捞数据耗时ms141/879/264最少/最大/平均睡眠时间ms4121/4859/473543/
10、43126/696/2104304/4874/4789132/870/2474130/4868/47523个线程共捞且发送saf记录共22740条3个线程共捞且发送saf记录平均耗时(264+210+247)/3=240.33毫秒3个线程共捞且发送saf记录循环平均次数(49+43+49)/3= 47次3线程共同捞且发送saf数据平均速度: 22740/240.33*1000/47= 2013.19 (条/秒)2.4.4性能曲线图2.4.4.1图表说明:捞saf数据且发送数据所耗时间(毫秒)图X轴为线程循环次数,Y轴为捞saf数据且发送数据所耗时间(毫秒)整个运行期间,所有线程中耗时最小126
11、毫秒,最大879毫秒,平均值: 240.33毫秒2.4.4.2图表说明:Memory free检测图X轴为每间隔5秒循环检测Memory free次数,Y轴为Memory free值(M)Memory free值来源于服务器的TOP命令中Memory free值物理内存: 2097152 KbytesMemory free值(M)(起点92.83M):整个运行期间,最小值: 74.72M,最大值92.83M,平均值:84.38M(平均耗内存92.83-84.38= 8.45M)2.4.4.3图表说明:userCpu、sysCpu idleCpu的平均值检测图X轴为每间隔5秒循环检测Cpu次数,
12、Y轴为userCpu、sysCpu idleCpu的平均值(%)userCpu、sysCpu idleCpu值来源于服务器的TOP命令中userCpu、sysCpu idleCpu的Avg值userCpu值(%):31.9%,最大值38.9%,平均值:35.4%sysCpu值(%):18%,最大值23.4%,平均值:21.02%idleCpu值(%):0.2%,最大值46.6%,平均值:33.14%2.4.5压力测试小结下列测试指标证明系统处于轻载状态3线程共同捞且发送saf数据平均速度: 2013.19 (条/秒)捞saf数据且发送数据(平均每线程每次大约160条记录)所耗时间, 所有线程中
13、耗时最小126毫秒,最大879毫秒,平均值:240毫秒Memory free值(M),整个运行期间, 最小值74.72M,最大值92.83M,平均值:idleCpu值(%),整个运行期间, 最小值:3压力测试场景二3.1场景二特征saf数据记录有50万条,未处理的数据记录有20万条,共有8个线程,落地方机构有25个,平均每个线程处理大约3个机构。该场景验证数据库访问的吞吐能力、系统线程的协调能力,同时也可验证在高强度压力下功能的正确性。本场景是在启动sc、关闭sn1、sn2应用后进行测试。3.2测试数据3.2.1线程信息表线程4线程5线程6线程7线程8共8个线程,循环间隔时间5000ms,每次
14、捞saf数据记录100条3.2.2线程与落地方关系表200159118981270177119711371173117911230128018911290185118711931131113511531147115511571188881201.共26个机构,占总机构(31个)的84%,其中机构码8888是特殊机构,是中心应用日月结数据2.每个线程大约管理3个机构的saf数据发送3.2.3saf数据关系84%的省(26省)50万20万30万834*(30/60/90)4*(120/150/180)1.saf总记录数50万,未处理的20万,占总数的40%2.20万未处理的数据平均散落到25个省中
15、,平均8000条/省3.每条saf记录的发送优先级别是在4,5,6三个优先级别的其中之一3.3测试步骤与压力测试场景一完全相同3.4测试结果3.4.1测试日志和脚本1).(参见压力测试场景二测试日志.rar)2).(参见场景一压力测试日志解释程序)HibernateTest1.java3.4.2基本测试结果3.4.3支撑数据和测试结果表8/0468288/626185/5867740/0/0519297/661643/6122597/0556247/723280/675301596618/764844/706594481347/789852/70751210/0374084/562711/49
16、32069/0439257/581731/539130355052/498521/4636428线程共同捞且发送saf数据(条):105308线程共同捞且发送saf数据平均耗时(毫秒): 598052.258个线程共捞且发送saf记录循环平均次数:8.25次8线程共同捞且发送saf数据平均速度(条/秒): 2.13(10530/598.05225/8.25)3.4.4性能曲线图3.4.4.1图表说明:捞saf数据且发送数据所耗时间(秒)图X轴为线程循环次数,Y轴为捞saf数据且发送数据所耗时间(秒)整个运行期间,所有线程中耗时最小355秒,最大790秒,平均值:598秒3.4.4.2图表说明:
17、Memory free值(M)(起点388M):126.82M,最大值287.73M,平均值:194.13M(平均耗内存388-194= 194M)3.4.4.3图表说明:1%,最大值23.8%,平均值:5.33%0%,最大值36.6%,平均值:5.40%0%,最大值99%,平均值:79.11%3.4.4.4图表说明:Disk检测图X轴为每间隔5秒循环检测Disk次数,Y轴为Disk busy值(%)Disk busy值来源于服务器的sar -d 命令中Disk busy值Disk busy值(%):94.29%,最大值100%,平均值:99.8%3.4.5压力测试小结下列测试指标证明系统处于
18、极度饱和状态8线程共同捞且发送saf数据平均速度: 2.13 (条/秒)捞saf数据且发送数据(平均每线程每次大约160条记录)所耗时间, 所有线程中耗时最小355秒,最大790秒,平均值:Memory free值(M),整个运行期间,最小值:idleCpu值(%),整个运行期间,最小值:Disk busy值(%),整个运行期间,最小值:系统处于极度饱和状态,瓶颈在 Disk 的读写操作4压力测试场景三4.1场景三特征与场景二几乎相同,不同的是未处理数据降为10万条,已经处理数据升为40万条。验证未处理数据量从20万降到10万后,数据库访问的吞吐能力是否有改善,可以改善多少?4.2测试数据4.2.1线程信息表与压力测试场景二完全相同4.2.2线程与落地方关系表4.2.3saf数据关系10万40万1.saf总记录数50万,未处理的10万,占总数的2