2.1 web_submit_data
页面提交数据项。输入框输入。使用用户名和密码进行登录用web_submit_data()函数提交表单数据:HTTP POST 请求,最常见的参数形式; Web_submit_form差不多。
1) EXTRARES:在开始录制选项中,Toos—Recording Option下—Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源。只有选择了“Record within the current script step”时,List of Resource Attributes才会被录制到(EXTRARES下面的URL才会出现)。非HTML资源(如:gif和jpg等图象文件,javascript、VBScript、activex、小程序)。
2) Snapshot:顾名思义,就是快照,代表当前的step,Snapshot显示了客户端在执行完当前step后的样子。在Tree Ciew右侧的frame中可以查看Snapshot,在LoadRunner 8.0中,Snapshot包含Page View、Client Request和Server Response。Snapshot有两种生成方式,一种是在record的时候生成,另一种是在replay的时候生成。你可以对比两种方式生成的Snapshot,以发现哪些是动态值,需要参数化。
2.2 web_url
根据url获取图片;用web_url()函数访问数据;请求方式:HTTP GET 请求;加载指定的Web页面(GET请求) 。
2.3 web_custom_request()
将终端信息提交到服务端进行保存;用web_custom_request()函数提交数据:HTTP POST 请求,请求参数为json格式;
2.4 bfDeleteRoles
删除前的校验。deleteRoles删除。程序里写的两个向服务器提交数据的方法。不是重复录制。
2.5 数据量大小
数据库中1w条记录与7w条,查询响应时间应该
2.6 top
2.7 free
2.8 iostat
2.9 录制脚本时,lr不能打开浏览器。
解决办法:关闭所有lr,任务管理器中结束ie浏览器的进程,执行"C:\Program Files (x86)\HP\LoadRunner\bin\register_vugen.bat",然后再重新录制。 如果还是不可以,需要重启电脑。
2.10 参数设置
脚本设置完参数化,脚本运行的每一遍所取的参数化的值都不一样,那么这个值按照个什么情况来取呢?会有很多种方式
Select next row【选择下一行】:
顺序(Sequential):按照参数化的数据顺序,一个一个的来取。
随机(Random):参数化中的数据,每次随机的从中抽取数据。
唯一(Unique):为每个虚拟用户分配一条唯一的数据
Update value on【更新时的值】:
每次迭代(Each iteration) :每次迭代时取新的值,假如50个用户都取第一条数据,称为一次迭代;完了50个用户都取第二条数据,后面以此类推。
每次出现(Each occurrence):每次参数时取新的值,这里强调前后两次取值不能相同。
只取一次(once) :参数化中的数据,一条数据只能被抽取一次。(如果数据轮次完,脚本还在运行将会报错)
上面两个选项都有三种情况,如果将他们进行组合,将产生九种取值方式。
Select Next Row 【选择下一行】 | Update Value On 【更新时的值】 | Replay Result 【结果】 |
顺序(Sequential) | 每次迭代(Each iteration) | 结果:分别将15条数据写入数据表中 功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取 如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条 |
顺序(Sequential) | 每次出现(Each occurrence) | 结果:分别将15条数据写入数据表中 功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取 如:如果参数化文件中有15条数据,而迭代设置为16次,那执行结果中,参数化文件第一行的数据有两条 |
顺序(Sequential) | 只取一次(once) | 结果:表中写入15条一模一样的数据。 功能说明:每次迭代都取参数化文件中第一行的数据。 |
随机(Random) | 每次迭代(Each iteration) | 结果:表中写入15条数据,但可能有重复数据出现 功能说明:每次从参数化文件中随机选择一行数据进行赋值 |
随机(Random) | 每次出现(Each occurrence) | 结果:表中写入15条数据,但可能有重复数据出现 功能说明:每次从参数化文件中随机选择一行数据进行赋值 |
随机(Random) | 只取一次(once) | 结果:表中写入15条相同数据 功能说明:第一次迭代时随机从参数化文件中取一行数据,后面每次迭代都用第一次迭代的数据。 |
唯一(Unique) | 每次迭代(Each iteration) 自动分配块大小 | 结果:分别将15条数据写入数据表中 功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。 注:如果设置迭代次数为16次。结果:在执行第16次迭代时会抛异常,异常日志可在LoadRunner的回放日志(replayLog)中看到。 |
唯一(Unique) | 每次出现(Each occurrence) 步长为1 | 结果:分别将15条数据写入数据表中 功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。 注:如果设置迭代次数为16次,而参数化文件中只有15条数据,明显数据不够。此时可以设置“when out of values”属性来判断当数据不够时的处理方式 Abort Vuser:中断虚拟用户 Countinue in a cylic manage:循环取参数化文件中的值,即:当参数化文件中的值取完后又从参数化文件的第一行开始取值。 Countinue with last value:继续用最后一条数据 |
唯一(Unique) | 只取一次(once) | 结果:表中写入15条相同数据 功能说明:每次都取参数文件中的第一条数据进行赋值 |
总结性:
Unique , Each iteration , Countinue in a cylic manage
2.11 关联
int web_reg_save_param (const char *mpszParamName, <List of Attributes>, LAST);
ParamName:存放动态数据的参数名称。
list of Attributes:其他属性,包含 “Notfound”、“LB”、“RB”、“RelFrameID”、“Search”、“ORD”、“SaveOffset”、“Convert”以及“SaveLen”。
下面将详细说明每个属性值的意义:
1、Notfound:指定当找不到要找的动态数据时该怎么处理。当指定Notfound=error时,表示着找不到动态数据时,就发出一个错误消息。此为该属性的默认值。当指定Notfound=warning时,表示当找不到动态数据时,不发出错误消息,只发出警告,脚本也会继续执行下去不会中断。在对脚本出错时,可以如此设置。
2、LB:动态数据的左边界字符串。此属性是必须要有的,而且区分大小写。
3、RB:动态数据的右边界字符串。此属性是必须要有的,而且区分大小写。
4、RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性可以是All或是数字,而且可有可无。
5、Search:搜寻的范围,其值可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值),此属性可有可无。
6、ORD:指明从第几次出现的左边界开始才是要撷取的数据,默认值是1。假如该属性值为All,则所有找到符合的数据会存储在数组中。此属性可有可无。
7、SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0。
8、Convert:转换数据格式。当指定该属性值为HTML_TO_URL时,意味着将HTML-encoded数据转成URL-encoded数据格式。如果是HTML_TO_TEXT,表示将HTML-encoded数据转成纯文字数据格式。
9、SaveLen:当找到匹配项后,偏移量之后的几个字元存储到参数中。此参数可有可无,默认值是-1,表示一直到结尾的整个字符串都存入参数中.
怎么插入关联函数呢?
根据我的经验,当找到两个脚本的差异后,在对应区域插入关联函数,单击回车键,显示一行为空,在此行可以手动输入关联函数web_reg_save_param("参数名称","左边界","右边界","查询区域",LAST);或单击鼠标右键单击【insert】>【net step...】>在add step界面,step type中选择services>web_reg_save_param,单击【ok】键,弹出如下图所示:
单击【OK】键,显示如下信息:
web_reg_save_param("lt",
"LB/IC=name=\"lt\" value=\"",
"RB/IC=\"",
"Ord=1",
"Search=Body",
LAST);
对脚本中需要参数化进行替代,如下图所示:
对于确定参数的左右边界,我个人建议是在找到脚本中差异性的地方【LT-68750-afrD2frlzMHDQ1wwDsjlNugZgY0mxw】后复制,然后在Generation Log日志中通过ctrl+F组合键查找,如下图所示:
对于引号需要使用【\】作转义,例如上面的左边界可以写成name\"lt\" value=\" ,右边界可以写成\" 。
第五步:验证关联函数是否正确。
首先设置一下输出日志,在VuGen的工具栏运行时设置【Run-time Settings】>log>勾选Enable logging>Always send messages>Extended log>勾选Parameter substitution。个人观念,在负载测试时不需要输出参数日志,改为Standard log日志即可,因为输出参数日志也需要时间。如下图所示:
回放脚本时,会在Replay Log日志中可以显示关联参数的相应值,此值是动态变化的,每一次执行后,显示的值都不一样。如下图所示:
2 环境配置
2.1 cpu
4个cpu,8核。 (之前是2核cup ,后来调到8核cpu。Cpu 都是2的次幂形式。)看nmon中sys_summ 图的%比。
2.2 内存
10g内存。(之前是6g内存)。看nmon中mem图中memfree 和 memtotal ,剩余空间和总空间。
2.3 线程数
java线程数:来一个用户会占用一个线程,用完随即释放。 我们测试的只是登陆退出,所以退出后线程立马释放。在weblogic 控制台中会显示出线程活动数和空闲数,如果有等待的线程数说明这个线程数不够用。根据处理业务的大小判断,一个cpu可处理25-30个线程。
# 调整java进程数。
export JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100"
export JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MaxPoolSize=550"
linux下系统对用户的默认线程数做了限制,可以通过:
ulimit -a
命令进行查看:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 515223
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
其中
max user processes (-u) 1024
表示当前系统允许的最大线程数,可以把此参数设大一些。
ulimit -u 5000
设置当前系统用户最大允许的线程数,只对本次会话有效,如果想要永久生效,可以通过修改:
$ cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 1024
只需要将1024改成你需要的值即可,设置完需要重启系统已生效。
2.4 Stuck Thread MaxTime
堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。注意:执行线程的数量一旦增加目前weblogic不会去减少他,如果增加了一些线程以后再次出现overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。
例如可以改成:默认600 改成1200
2.5 weblogic连接数
weblogic连接数:50-450 ,最大值比线程数多点就行了。
2.6 JTA
JTA :3000
2.7 数据库session连接数
数据库session连接数:4000 。 硬件提升后,发现压不上去,而且打开浏览器登陆时,包数据库连接池pool 问题。 经查看是连接数过多,因为登陆后有好几条sql语句,每一条占用一个session连接数。
2.8 网络
网络是:1000M 。 开始是100M的。 压不上去了后来看了一下网络拓扑图,发现连的是100M交换机的。 看nmon中net图,1000M / 8 =120 MB/S ,所以图的上行和下行各占60MB/S ,如果超过了,说明网络有问题。
2.9 压力机所能承受的用户数
压力机所能承受的用户数:400左右。 如果过多的话,压力机的内存和cup 和网络就承受不住。
2.10 io读写
io读写:如果数据交互特别多的话,io读写就耗费大。 Nmon上的线合并在一起,就说明磁盘不够用的了,读写后没有及时释放。
2.11 集群环境配置参数:
4个cpu 8核。
平台jvm最大内存8G。
JDBC池最大600。
JAVA进程池最大600最小400。
网络是:1000M
数据库session连接数,4000 。
JTA :3000
粘滞超长时间:216000
2.12 确定响应时间正确:
正在并发时,在ie浏览器中做一次操作,看一下响应时间是否与LR分析出来的差不多。
2.13 sql分析
当软硬件配置都没什么问题时,响应时间过长或是通过事物数折线图不正确时,需要看一下awr报告中数据库的sql脚步执行时间。
2.14 通过事物数与并发数成正比。
2.15 硬件配置
Nginx要单独装一台机器,不然会影响应用服务器的性能。各节点要分开到虚拟机上。反向代理。
2.16 数据库优化(oracle)
目前可以调整的主要是数据库内存配置和最大连接数的基本配置,提高并发处理效率。
在进行测试时监测会话及连接等信息
Select * from v$session;
Select * from v$session where status=’ACTIVE;
Select * from v$process;
Select * from v$locked_object;
建议调整
SGA参数Data buffer,将其尽可能的调大些。避免重复查询的磁盘I/O操作。
调整PGA参数设置原则:
SGA+PGA+OS使用内存<总物理RAM。在调试过程中可以观察PGA缓存设置命中率:
select value from v$sysstat where name ='physical reads';
SQL> select value from v$sysstat where name ='physical reads direct';
SQL> select value from v$sysstat where name ='physical reads direct (lob)';
SQL> select value from v$sysstat where name ='consistent gets';
SQL> select value from v$sysstat where name = 'db block gets';
3 LR问题集
4.1 另一个程序正在运行
也许大家遇到过这样的问题,如图:
解决方法:打开任务管理器:找到这个进程:ThumbProcess.exe,关掉这个进程即可解决。
4.2 事物响应时间一直处于直线状态。
解决方法:参数化设置成Unique ;
脚步中去掉EXTRARES下面的URL下载;
场景运行时设置忽略思考时间和log日志时间。
4.3 运行时,有部分用户一直结束不了
换个LR 试试。 或者是卸载了重新装一个英文版的, 中文版的好出这种问题。
4.4 脚本中产生多次请求
1. 使用loadrunner进行录制脚本之后,可以看到的在脚本有一个请求,会产生两次
2. 进行点击录制的按钮,进入到录制选项中,进行点击option按钮。
3. 进行点击列表中的port mapping中选项按钮。
4. 然后在network port mapping中已经被选择为了socket level and winnet data,进行点击
5. 弹出了下拉菜单中进行选择为socket level data的选项。
6. 6
在此重新录制脚本之后可以看到的在脚本只有一个请求的脚本的。
4 LR 实例分析
4.1 查询数据库的进程数。
现在已经超载了,所以weblogic建连接池建不了。程序报错。
Show parameter process;
Select count(*) from v$process;
5 数据库分析
6 完成一个脚本时间
1) 录制脚本:去掉验证码、录制脚本、参数化、关联、事物、检查点、调试。一个简单的登陆15分钟。复杂的就看情况而定。
2) 场景运行:10个运行一次6分钟,50并发运行一次7分钟。100并发运行3次,24分钟。一切顺利的话,一个小时完成。因为脚本稍微中间要暂停几分钟,释放一下资源。
3) 分析结果:nmon报告、awr报告、lr分析结果。
4) 总结就是一个简单的登陆,顺利的话1个小时左右就完成了。
7 性能调优
需要现场提供的测试数据
7.1 服务器本身
机器的种类,内存,swap空间,和CPU的数量(核心数),
调整系统socket打开数,建议将open file size 也调大一些。
测试系统I/0 是否存在I/O问题。
7.2 Jvm 参数优化(weblogic启动jvm内存设置)
启动weblogic时设置jvm参数大小
set JAVA_OPTS=-Xms4096m –Xmx8192m
需要确定当前系统物理内存和jdk版本及位(64 or 32)
,
如果当前内存配置大于上述配置可先忽略。
7.3 weblogic
调优参数对Weblogic的调优主要从SEVER、ExecuteQueue、JDBC等几个方面的相关参数进行调优:
一、SERVER
在mydomain->Servers->myserver->Configuration->Tuning->“Enable Native IO”中:
1、Native IOEnabled TRUE,表示该Server使用本地I/O
2、SocketReaders 设置在执行线程中专用做Socket Readers的百分比
3、Maximum Open Sockets 最大打开Socket数
4、Stuck Thread MaxTime
堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程。如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。注意:执行线程的数量一旦增加,目前weblogic不会去减少他,如果增加了一些线程以后再次出现
overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。
例如可以改成:默认600 改成1200
5、Stuck Thread Timer Interval
系统检查堵塞线程的时间间隔
6、Low Memory GC Threshold
当可用内存小于该百分比时,垃圾回收启动
7、Low Memory Granularity Level
当两次检测的可用内存变化超过该百分比时,垃圾回收启动
8、Low Memory Sample Size
在一次检测中的取样次数
9、Low Memory Time Interval
检测间隔时间
10、Accept Backlog
等待队列中最多可以有多少TCP连接等待处理,如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%
7.4 ExecuteQueue
在mydomain->Servers->myserver ->Monitoring->Monitor all Active Queues...
->Configuration->weblogic.kernel.Default->
1、ThreadCount
服务器初始创建的执行线程的数量,设置原则:
增大机器的最大并发线程数使处理器利用率达到最大,并发线程数理论上等于,够用即可,过大会降低系统性能。建议:查看当前配置,确定当前系统cpu核心数,可按每核心支持
20线程数进行配置。11g可能需要通过修改xml配置文件进行设置。
2、QueueLength
在等待队列里的请求数,理想状态下是0
3、QueueLength Threshold Percent
一个百分数,当request的数量达到队列长度的这个比例的时候,weblogic会发出overflow
的标志信息
4、ThreadsIncrease
如果weblogic发出overflow的标志信息,weblogic会尝试增加这个数量的执行线程,以解决
处理矛盾
5、ThreadsMaximum
最大执行线程数
6、Threads Minimum
最小执行线程数
7、ThreadPriority
线程优先级
7.5 JDBC
在service->JDBC-> JDBC Connection Pools->Configuration->name->Connections
1、Initial Capacity
初始数据库物理连接数
建议设置为15-20之间
2、MaxCapacity
最大数据库物理连接数
根据数据库本身所支持的最大连接数进行设置,建议设置为数据库最大连接数的80%。
3、Capacity Increment
每次数据库物理连接增加数
4、Statement Cache Type
prepared statements缓存的策略,LRU算法在有新的语句到来时,将最不经常被用得语
句调整出缓存。FIXED算法为先进先出的算法
5、TestConnectionsOnReserve
TestConnectionsOnReserve设置为false(缺省设置)。如果此参数设置为真(
true),则在连接被分配给调用者之前,都要经过测试,这会额外要求与数据库的反复连接
6、Statement Cache Size
宏语句设定的静态缓存,大小由JDBC连接池配置时指定,调整这个数值的大小,有利于提高系统的效率调整缓存大小:
7、Login Delay
创建数据库物理连接时的延时时间
7.6 监控日志
1、server log
系统启动及运行过程中的日志,可在weblogic管理端中进行配置。
2、access log
7.7 数据库优化(oracle)
目前可以调整的主要是数据库内存配置和最大连接数的基本配置,提高并发处理效率。 在进行测试时监测会话及连接等信息
Select * from v$session;
Select * from v$session where status=’ACTIVE;
Select * from v$process;
Select * from v$locked_object;
建议调整SGA参数Data buffer,将其尽可能的调大些。避免重复查询的磁盘I/O操作。
调整PGA参数设置原则:SGA+PGA+OS使用内存<总物理RAM。
在调试过程中可以观察PGA缓存设置命中率:
select value from v$sysstat where name ='physical reads';
SQL> select value from v$sysstat where name ='physical reads direct';
SQL> select value from v$sysstat where name ='physical reads direct (lob)';
SQL> select value from v$sysstat where name ='consistent gets';
SQL> select value from v$sysstat where name = 'db block gets';
8 错误日志总结
7.1 错误-27727
Action.c(13):错误-27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the "Step Timeout caused by resources is a warning" Run-Time Setting to Yes/No to have this message as a warning/error, respectively
解决方案:修改“运行时设置-HTTP请求连接超时、HTTP请求接收超时”的值为600s或者更长时间
7.2 错误-27796
Action.c(39):错误-27796:连接服务器“test0105.s1.diy.com:80”失败: [10061] Connection refused
有可能是服务器有太多的数据库连接,提示连接被拒绝
解决方案:
可以让开发尝试调整:
1).数据库最大连接数;
2). tomcat的最大并发数限制
7.3 错误-27791
Action.c(9):错误-27791:服务器“test0105*.s1.diy.com”已过早关闭连接
访问时已经下载不到资源了,有可能是已经达到服务器资源的瓶颈了,可以查看服务器资源如CPU、负载等
4. Error -27791
Action.c(7): Error -27791:Server"10.10.0.88" has shut down the connection prematurely
借鉴51Testing网友提供的解决方案:
1)、应用服务器死掉。小用户时程序上的问题,程序上处理数据库的问题
2)、应用服务没有死。应用服务参数设置问题。例如:在许多客户端weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是weblogic中的server元素的acceptbacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%。
3)、数据库的连接
在应用服务的性能参数可能太小了
数据库启动的最大连接数(跟硬件的内存有关)
4)、有时关闭防火墙如卡巴斯基也会解决如上问题
7.4 Error -27727Step download timeout (120 seconds)has expired when downloading resource(s). Set the“Resource Page Timeout is a Warning” Run-Time Setting to Yes/No to have this message as a warning/error, respectively 处理方法: |
A、应用服务参数设置太大导致服务器的瓶颈
B、页面中图片太多
C、在程序处理表的时候检查字段太大或多
7.5 Error -27728
Step download timeout (120 seconds)has expired when downloading non-resource(s)。
错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。
解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在"Runtime Setting">"Internet Protocol:Preferences">"Advanced"区域中设置一个"winlnet replay instead of sockets"选项,再回放是否成功。
7.6 Error -27791
Server“192.168.1.77″ has shut down the connection prematurely
解决方案如下:
1、应用服务器死掉。小用户时程序上的问题,程序上处理数据库的问题
2、应用服务没有死。应用服务参数设置问题。例如:在许多客户端weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是weblogic中的server元素的acceptbacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%。
3、数据库的连接在应用服务的性能参数可能太小了,数据库启动的最大连接数(跟硬件的内存有关)
4、有时关闭卡巴斯基也会解决如上问题
1)观察response time 是否 超出默认的120秒
2)检查服务器日志是否有异常以及负载是否过高
3) web_set_timeout 设置更长的超时超时上限
如
web.set_timeout(”CONNECT”, “360″);
web.set_timeout(”RECEIVE”, “360″);
web.set_timeout(”STEP”, “360″))观察response time 是否 超出默认的120秒这个问题,要详细分析了。应该不会是LR自身造成的问题。把时间调长,就是为了,定位问题在什么地方,而不是为了绕过这个错误的出现。
7.7 Error -27492
"HttpSendRequest" failed, Windows error code=12002 andretry limit (0) exceeded for URL
在runtime setting中的preferences-->options-->http-request connect timeout(sec)的值设为999。
7.8 Error -27498
Timed out while processing
URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/querystat/subOrderQuery.do
错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。
如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。
解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。
如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。
最后,增加一下运行时的超时设置,在"Run-Time Settings">"InternetProtocol:Preferences"中,单击"options",增加"HTTP-request connect timeout" 或者"HTTP-requestreceive"的值。
7.9 Error -26612
HTTP Status-Code=500 (Internal Server Error)
forhttp://192.168.0.8:10001/logonConsole.do;jsessionid={JSESSIONID2}
造成HTTP-500错误,有朋友告诉我如下几个可能:
1、运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误。减小用户数或者场景持续时间,问题得到解决。
2、该做关联的地方没有去做关联,则报HTTP500错误。进行手工或者自动关联,问题得到解决。
3、录制时请求的页面、图片等,在回放的时候服务器找不到,则报HTTP500错误,若该页面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。
4、参数化时的取值有问题,则报HTTP500错误。可将参数化列表中的数值,拿到实际应用系统中进行测试,可排除问题。
5、更换了应用服务器(中间件的更换,如tomcat、websphere、jboss等),还是利用原先录制的脚本去运行,则很可能报HTTP500错误。因为各种应用服务器处理的机制不一样,所录制的脚本也不一样,解决办法只有重新录制脚本。
6、Windows xp2 与ISS组件不兼容,则有可能导致HTTP500错误。对ISS组件进行调整后问题解决。
7、系统开发程序写的有问题,则报HTTP500错误。例如有些指针问题没有处理好的,有空指针情况的存在。修改程序后问题解决。
查找后台日志发现报了很多0ra-01000错误,这是Oracle达到最大游标参数值,google了下,最大原因可能是JDBC连接没关闭。最后查找weblogic连接池出了问题,很多连接没关闭。
7.10 Error -27496
内部错误(呼叫客户服务): _eStat (7) !=LRW_ITEM_STAT_ENUM_UNHANDLED for HandledTask at 048E180C
7.11 Error -27995
Requested link ("Text=计划管理") not found [MsgId: MERR-27995]
方法:在IE中的工具—>Internet选项—>高级—>HTML设置中选择第二个脚本类型.
7.12 Error -27279
内部错误(呼叫客户服务):Report initialization failed , error code =-2147467259 [MsgId : MERR-27279 ]
建议重装一下LR.这种问题有可能和你安装有关.dll文件出错不是说写的程序就能修改的.
7.13 Error -27796
Failed to connect to server 'hostname';port_ld': 'reason'.10048.
成功的解决方法:
在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里,有如下两个键值:
TcpTimedWaitDelay
MaxUserPort
1,这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。
2,也可以把MaxUserPort调大(如果这个值不是最大值的话)。
7.14 Error -10489
Exception was raised when calling per-thread-terminate function
在用Loadrunner实施性能测试时,采用Goal模式加压,存在如果持续长时加压时LoadRunner的Controller会报 Error -10489 : Exception wasraised when calling per-thread-terminate function错误;
问题产生原因:
Unlike the earlier Windows versions, Windows 2000 and Windows XP have thedefault environment set to C:\Document and Settings\<user-name>\LocalSettings\Temp instead of C:\Windows\temp. This long path with a space can causeseveral problems for LoadRunner. To resolve the issue, change to a directorywithout empty spaces.
解决方法:
在C盘(或是其它盘均可以)新建TEMP文件夹(为了后续设置临时文件准备)
右键"我的电脑"->高级->环境变量->编辑修改TEMP变量目录,指身上面新建的目录,如我的指向C:\TEMP->保存即可^_^
1> 问题描述Connection reset by peer. Error code : 10054
设置下载等的超时
用VuGen录制脚本后,回放或者加压的时候,可能会出现错误信息“Action.c(65): Error : socket6 - Connection reset by peer. Errorcode : 10054”
这是因为,下载的速度慢,导致超时,所以,需要调整一下超时时间,方法如下:
在Run-timesetting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),,重新设置一下“HTTP-requestconnect timeout(sec)”
2> 问题描述:
Error:Failed to connect to server“192.168.2.192”:[10060]Connection
Error:timed out Error:Server“192.168.2.192”hasshut down the connection prematurely
原因:
1> 应用访问死掉
小用户时:程序上的问题。程序上存在数据库的问题
2> 应用服务没有死
应用服务参数设置问题
例如:
在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%
Java连接池的大小设置,或JVM的设置等
3> 数据库的连接
在应用服务的性能参数可能太小了
数据库启动的最大连接数(跟硬件的内存有关)
3> 问题描述
Error:Page download timeout(120seconds)has expired
分析原因:
应用服务参数设置太大导致服务器的瓶颈
页面中图片太多
在程序处理表的时候检查字段太多
7.15 Error -27492
"HttpSendRequest" failed, Windows error code=12002 andretry limit (0) exceeded for URL
在runtime setting中的preferences-->options-->http-request connect timeout(sec)的值设为999
Runtime Setting>Preferences>Advanced区域中设置一个winlnet replay instead of sockets选项(不勾选此项报Error -27727)
7.16 Error -27279
内部错误(呼叫客户服务):Report initialization failed , error code =-2147467259 [MsgId : MERR-27279 ]
警告:扩展 LrXml.dll报告在调用函数ExtPerThreadInitialize时出现错误 -1
错误: Vuser初始化扩展 LrXml.dll失败。
Vuser Terminated.
建议你重装一下LR.
这种问题有可能和你安装有关.dll文件出错不是说写的程序就能修改的.
7.17 Error -10061
Connection refused
在用loadrunner进行并发测试时,[10061]Connection refused,是服务器拒绝,一种方案是调整服务器的请求数。但是,有时候是服务器拒绝对同一个ip的多次请求,这时调整服务器不好实现,可以财用ip欺骗来防止10061的产生,这也是本文讨论的主题。
Ip欺骗的步骤:
1。添加ip,2种方法:1种方法是使用loadrunner的Ip Wizard进行----打开ipwizard后按提示进行操作,没什么问题,只是需要重起下机器(小技巧:如果你在使用前,把loadrunner关闭,把agent关闭,把网卡禁用,然后使用Ip wizard后再去启动网卡、agent,则可以不重起机器);还一种方法是自己手动添加,打开本地连接,打开Tcp/ip设置(我相信能看到这的人是打开这些是不成问题的),打开高级,然后添加ip。
2。在Controller里设置ip欺骗:在Controller中点击菜单scenario,选择"Enable Ip Spoofer",这就打开了Ip欺骗,对于Ip欺骗的设置,先在菜单Tools下选上"Expert Mode"选项用于打开专家模式(感觉没有什么特殊,无非就是是后面的Options弹出的对话框多了几个选项卡),然后选择Tools下的Options,打开对话框,找到General,这时可以选择Ip欺骗的方式:为每个Process还是Thread产生ip。
3。设置场景时,多设计几组VUser(可以是针对一个叫本,每组Vuser使用一个ip,这样又多少组就是用多少组ip)。
Ok,运行场景吧,这时发出去的包是进行Ip欺骗的,想要验证的话,不妨把下面的代码放入你的叫本任意位置(当然是要能执行到的位置,不妨放在Action的开始部分,对脚本的运行没有影响):
char *ip=lr_get_vuser_ip();
if(ip){
lr_log_message("The ip address is %s",ip);
}else{
lr_log_message("IP spoofing disabled");
}
然后在运行场景前,选择几组Vuser,在后边点击"Run-TimeSetting"进行设置,这里要设置的是General--〉Log下,选中Enable Logging和Always send messages,这样运行场景后你可以查看Vuser使用的Ip(在运行场景后,点击"Vusers...",打开Vuser信息,在弹出框左上找到Log日志按钮,然后可以看到该组Vuser的运行信息,在里面可以看到使用的ip信息)。
补充:这么做是在发包时进行欺骗,但是网卡的MAC地址不会变,如果发出去的包经过DHCP(动态路由)时,欺骗就被揭发了--总之就是不成功了,因为DHCP服务器 会根据package来自的mac地址在dhcp路由器中的ip影射表里找到网卡的真实ip然后转发出去(含有个人推测,若有错误,请纠正),因此如果被测试的服务器在外网而你所在的网段使用了DHCP路由,我也没脾气了(暂时不知道怎么处理),但是如果被测服务器和你在同一个网内,ok,可以解决,思路:把服务器的网关地址指向你的测试机器,然后使用不同于局域网中的网段,例如:公司使用的是DHCP,并且使用192.168.0.X的网,可以把测试机器ip改成192.168.10.1,掩码255.255.255.0,网关指向自己192.168.10.1,然后把被测服务器ip改成:ip192.168.10.250,掩码255.255.255.0,网关192.168.10.1,ok,在测试机器上添加ip,使用192.18.10.X,然后开始测试吧。
7.18 LoadRunner脚本中出现乱码
在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。
错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。
错误分析:脚本录制可能采用的是URL-based script方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。
解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在"Recording Options"的"Advanced"选项里先将"Surport Charset"选中,然后选中支持"UTF-8"的选项。
7.19 LoadRunner HTTP服务器状态代码
在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。
错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。
错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。
解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。
错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。
错误分析:服务器碰到了意外情况,使其无法继续回应请求。
解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。
7.20 LoadRunner请求无法找到
在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。
错误现象:Action.c(41):Error -27979: Requested form not found [MsgId: MERR-27979]
Action.c(41): web_submit_formhighest severity level was "ERROR",0 body bytes, 0 header bytes[MsgId: MMSG-27178]"
这时在tree view中看不到此组件的相关URL。
错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用"HTML-based script"模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用HTTPS安全协议,这 时则使用"URL-based script"模式进行录制。
解决办法:打开录制选项配置对话框进行设置,在"Recording Options"的"InternetProtocol"选项里的"Recording"中选择"Recording Level"为"HTML-basedscript",单击"HTML Advanced",选择"Script Type"为"A scriptcontaining explicit"。然后再选择使用"URL-basedscript"模式来录制脚本。
7.21 LoadRunner不执行检查方法
在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。
错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。
错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。
解决办法:打开运行环境设置对话框进行设置,在"Run-time Settings"的"InternetProtocol"选项里的"Perference"中勾选"Check"下的"Enable Image andtext check"选项。
7.22 LoadRunner回放Web Services协议脚本错误
LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。
错误现象:利用LoadRunner8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示"Error:server returned an incorrectlyformatted SOAP response"。
错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xmlversion="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。
解决办法:下载两个补丁,分别为"LR80WebServicesFPI_setup.exe"和"lrunner_web_services_patch_1.exe"安装上即可。
http://wenku.baidu.com/view/a576eb0a79563c1ec5da71c8.html
7.23 业务
进入借款单(显示借款单列表),新建借款单,新建后显示借款单列表(新建的借款单在此列表中有显示)
我是录制的脚本,可运行时,提示 Action.c(112):错误-26627:对于“http://192.168.1.105:8080/T3/fee/feeLoanList.action”,HTTP状态代码=404 (Not Found)
解决:
说两点:
1.手动正常未必就真正常,LR加压的时候可能连接数占满了,所以出404
2.还有一种情况,脚本里有检查语句,叫什么lr_check还是什么的,就是一个脚本内部检查是否有该资源用的,不见着他我拼不出来,如果有,注释掉看看
7.24 在Controller里运行脚本,运行一段时间以后出现如下error messages
1. Code -60990 Error: Two Way Communication Error: Function two_way_comm_post_message /two_way_comm_post_message_ex failed.
2. Code -29739 Error: Service client with id=1 failed to post a message, reason -communication error.
3. Code -16895 Error: Failed to post xdr buffers data array by post_ex.
4. Code -10343 Error: Communication error: Cannot send the message since reached theshared memory buffer max size.
问题诱因1:
共享内存缓存溢出,造成Controller和Load Generator之间通讯出现问题。
解决方案:
修改两个配置文件。
1.$installation folder$\dat\channel_configure.dat
2. $installationfolder$\launch_service\dat\channel_configure.dat
在这两个文件中的[general]部分下添加如下配置。
shared_memory_max_size=100(修改共享内存为100MB,默认是50MB)
重新启动Controller,问题解决。
问题诱因2
打开 controller中的 diagnostics菜单,点掉复选框..步骤如下图
2. 点掉 Enable the following diagnostics