1 测试内容
模拟数据采集的整个过程,记录整个采集过程所用时间,以及每个采集子过程所用的时间,监控TOMCAT资源利用情况、应用服务器的资源利用情况,找出性能瓶颈所在。调整各方面的配置参数,优化性能。
1.1 源库XML包:
<?xml version="1.0" encoding="UTF-8"?>
<MHC_BabyVisitInfo>
<PregnantID de="DEX04.01.001.01">
0000000000026888</PregnantID>
<BabyID de="DEX04.04.001.01">
0000000000046310</BabyID>
<BabyName de="DE02.01.039.00" />
<BabyNO de="DEX04.04.001.02" />
<BabySex de="DE02.01.040.00" display="男性" localCode="1"
localText="男性">1</BabySex>
<BabyBirth de="DE02.01.005.01">2011-09-25</BabyBirth>
<CertificateNO de="DEX04.04.001.03" />
<BabyAddress de="DEX04.04.001.04" />
<FatherName de="DE02.01.039.00">fdf</FatherName>
<FatherJob de="DEX04.04.001.13" />
<FatherPhone de="DE02.01.010.00">13067916410</FatherPhone>
<FatherBirth de="DE02.01.005.01">1959-02-12</FatherBirth>
<MotherName de="DE02.01.039.00">ss</MotherName>
<MotherJob de="DEX04.04.001.13" display="不便分类的其他从业人员"
localCode="Y" localText="不便分类的其他从业人员">Y</MotherJob>
<MotherPhone de="DE02.01.010.00">ss</MotherPhone>
<MotherBirth de="DE02.01.005.01">1981-06-17</MotherBirth>
<MotherCardNO de="DE02.01.030.00">330102198706172121</MotherCardNO>
<Gestation de="DE02.10.006.00" />
<PregnancyDisease de="DEX04.04.001.07" />
<OtherDisease de="DEX04.04.001.08" />
<DeliveryUnit de="DEX04.04.001.09" />
<BirthStatus de="DEX04.04.001.05" />
<OtherStatus de="DEX04.04.001.06" />
<Asphyxia de="DEX04.04.001.10" display="无" localCode="1"
localText="无">1</Asphyxia>
<MalforMation de="DEX04.04.001.12" display="未发现"
localCode="2" localText="未发现">2</MalforMation>
<MalforMationDescription de="DE02.10.025.00" />
<HearingTest de="DEX04.04.001.00" />
<Weight de="DEX03.02.001.15" />
<Length de="DEX03.02.001.16" />
<FeedWay de="DEX03.10.001.28" />
<InputUnit de="DEX03.05.001.16">33010500222111</InputUnit>
<InputUser de="DEX06.04.001.05">gsmsw052222111</InputUser>
<InputDate de="DEX06.05.001.16">2010-10-25</InputDate>
<LastModifyUser de="DEX01.01.002.12">gsmsw052222111</LastModifyUser>
<LastModifyDate de="DEX01.01.002.13">2010-10-25</LastModifyDate>
<MPIID de="DEX01.01.001.24">ec433954197a4cf6a42012a12121bc3f3d432</MPIID>
</MHC_BabyVisitInfo>
1.2 示例:解析XML包中的8个字段
InputUnit,InputDate,Weight,Length,FeedWay,BabyBirth,BabyID,MalforMation
2 程序部署
2.1 数据采集过程
整个数据采集过程分为一个阶段:
2.2 服务器部署
整个数据采集过程部署在以下2台服务器:
3.1 硬件配置
3.2 软件配置
4 测试时间
时间 2013-01-25到2013-02-02
5 测试方案
采集程序解包并将指标数据保存到对应的指标表中
6 测试结果
6.1.1 方案一测试结果记录
方案一,
单线程,一个脚本采集113W数据。
测试结果:
单线程采集113W数据,如图所示总共用时25.40秒,每秒741.5条。运行过程中相对比较稳定,基本都在平均速度,但运行到1/4的时候,有一段速度比较慢,可能是网络情况造成的。如图所示
如图所示:为流程执行的性能监控图
1. 刚运行采集脚本时资源监控的情况
2.单线程采集10W数据时,资源监控的情况
3.单线程采集50W数据时,资源监控的情况
4.113W采集完成服务资源监控
6.1.2 方案二测试结果记录
多线程测试,同时执行10个脚本,每个脚本采集大概10W的数据量,并把数据保存到库中。
测试结果:
多线程采集113W数据,10个线程每个线程大约采集10W左右的数据,如图所示平均用时290秒,23W用时为363秒。运行过程中相对比较稳定,基本都在平均速度。如图所示
方案 数据量 时间 服务器资源 备注
平均用时 平均量 0W 50W 113W
方案一 1130000 290秒 350条/秒 Cpu:0.51%以内
内存:36%以内
网络:426KB
I/O:42千字节每秒 Cpu:6.63 %以内
内存:39%以内
网络:587KB
I/O:52千字节每秒 Cpu:0.51%以内
内存:37%以内
网络:0KB
I/O:112千字节每秒
如图所示:数据采集的情况
1. 多线程刚开始执行时:
2. 多线程采集数据到中途,大概1分钟左右,资源监控如下:
3. 多线程采集数据结束,大概3分钟左右,资源监控如下:
6.1.3 方案三测试结果记录
多线程测试,同时执行10个脚本,每个脚本采集100W的数据量,并把数据保存到库中。
测试结果:
多线程采集1000W数据,10个线程每个线程大约采集100W左右的数据,如图所示平均用时4000秒。运行过程中相对比较稳定,基本都在平均速度。当每次采集到分界线时(比如5W,10W,15W以此类推),CPU利用率就会增加,程序打印提示基线,程序处于释放内存,读取新数据。通过统计结果可以发现,ETL服务的多脚本采集同一个业务,采集效率平均化,采集10W与100W实际用时相差并不是很大。应用服务器数据采集压力并不大,由此推断性能压力应该在数据库服务器。如图所示
方案 数据量 时间 服务器资源 备注
平均用时 平均量 10W 50W 100W
方案一 1000W 4000秒 260条/秒 Cpu:0.51%以内
内存:9%以内
网络:9%
I/O:42千字节每秒 Cpu:0.9 %以内
内存:11%以内
网络:9%
I/O:52千字节每秒 Cpu:1.53%以内
内存:14%以内
网络:9%
I/O:112千字节每秒
1. 10个线程采集5分钟左右,资源服务的使用情况:
2. 10个线程采集10W数据,资源服务的使用情况:
3. 10个线程采集10分钟左右,资源服务的使用情况:
4. 10个线程采集15分钟左右,资源服务的使用情况:
5. 10个线程采集50W左右,资源服务的使用情况:
6. 10个线程采集100W左右,资源服务的使用情况:
6.1.4 方案四测试结果记录
多线程测试,同时执行25个脚本,每个脚本采集40W的数据量,并把数据保存到库中。
测试结果:
多线程采集1000W数据,25个脚本每个脚本大约采集40W左右的数据,如图所示平均用时10000秒,平均速度为40条/秒。运行过程中相对比较稳定,基本都在平均速度。通过统计的结果,方案三出现的每个脚本的采集耗时基本一致依然存在。数据库服务器的资源监控,初始采集时CPU,内存都会有增加,内存使用为7.2G左右,CPU使用为4%。采集过程中未发现异常,CPU,内存使用情况都是相对稳定。CPU使用率保持在2%,最高时达到4%,内存使用保持在7G左右。如图所示
方案 数据量 时间 服务器资源 备注
平均用时 平均量 10W 35W 40
方案一 1000W 10000秒 40条/秒 Cpu:0.48%以内
内存:9%以内
网络:9%
I/O:42千字节每秒 Cpu:0.9 %以内
内存:10%以内
网络:7%
I/O:52千字节每秒 Cpu:0.64%以内
内存:11%以内
网络:8%
I/O:112千字节每秒
1. 25个线程采集10W左右,资源服务的使用情况:
2. 25个线程采集35W左右,资源服务的使用情况:
3. 25个线程采集40W左右,资源服务的使用情况:
4. 25个线程数据库服务的资源服务的使用情况:
6.1.5 方案五测试结果记录
多线程测试,同时执行50个脚本,每个脚本采集20的数据量,并把数据保存到库中。
测试结果:
多线程采集1000W数据,50个脚本每个脚本大约采集20左右的数据,如图所示平均用时19000秒,平均速度为21条/秒。运行过程中相对比较稳定,基本都在平均速度。数据库服务器段内存,CPU相对比较稳定,CPU保持在2%,内存使用保持在7.02左右。应用服务器也未发现异常。如图所示
1. 50个线程应用服务器的资源服务的使用情况:
2. 50个线程数据库服务器的资源服务的使用情况:
6.1.6 方案六测试结果记录
多线程测试,同时执行100个脚本,每个脚本采集10W的数据量,并把数据保存到库中。
测试结果:
多线程采集1000W数据,100个脚本每个脚本大约采集10W左右的数据。采集过程中应用服务器相对比较稳定。数据库服务器端在刚启动脚本时,CPU,内存使用率比较高。CPU平均使用率保持在12%,最高达到17%,内存保持在7.35G。如图所示
1. 100个线程应用服务器的资源服务的使用情况:
2. 100个线程采集5分钟数据库服务器的资源服务的使用情况:
3. 100个线程数据采集过程中数据库服务器的资源服务的使用情况:
6.1.7 方案七测试结果记录
多线程测试,同时执行150个脚本,每个脚本采集10W的数据量,并把数据保存到库中。
测试结果:
150个脚本每个脚本大约采集10W左右的数据。数据库服务器端在刚启动脚本时,CPU,内存使用率比较高25%左右,采集过程中CPU编号比较大。CPU平均使用率保持在17%,最高达到40%,内存保持在7.4G。如图所示
1. 100个线程数据库的资源服务的使用情况:
2. 100个线程数据库的资源服务的使用情况:
3. 100个线程应用服务器的资源服务的使用情况:
4. 100个线程应用服务器的资源服务的使用情况:
5. 100个线程应用服务器的资源服务的使用情况:
7 测试结果总结
多线程采集,服务器资源利用更加充分,资源监控图所示发现当多线程测试时I/O,内存,网络等未发现有明显的波动,采集数据比较稳定。
第二阶段,测试过程中发现当每次采集到分界线时(比如5W,10W,15W以此类推),CPU利用率就会增加,程序打印提示基线,程序处于释放内存,读取新数据。通过统计结果可以发现,ETL服务的多脚本采集同一个业务,采集效率平均化,采集10W与100W实际用时相差并不是很大。在测试过程中,应用服务器数据采集压力并不大,TOMCAT设置 2G内存采集数据1500W。数据库服务器的在业务脚本增加的过程中,CPU,内存使用率不断提高,当同时执行150个脚本时,CPU使用率变化比较大,最高有达到40%,由此推断性能压力应该在数据库服务器。