2.1    web_submit_data

页面提交数据项。输入框输入。使用用户名和密码进行登录用web_submit_data()函数提交表单数据:HTTP POST 请求,最常见的参数形式; Web_submit_form差不多。

总结——LR学习总结_性能测试

1)  EXTRARES:在开始录制选项中,Toos—Recording Option—Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源。只有选择了“Record within the current script step”时,List of Resource Attributes才会被录制到(EXTRARES下面的URL才会出现)。非HTML资源(如:gifjpg等图象文件,javascriptVBScriptactivex、小程序)

总结——LR学习总结_学习总结_02

2)  Snapshot:顾名思义,就是快照,代表当前的stepSnapshot显示了客户端在执行完当前step后的样子。在Tree Ciew右侧的frame中可以查看Snapshot,在LoadRunner 8.0中,Snapshot包含Page ViewClient RequestServer ResponseSnapshot有两种生成方式,一种是在record的时候生成,另一种是在replay的时候生成。你可以对比两种方式生成的Snapshot,以发现哪些是动态值,需要参数化。

 

2.2    web_url

根据url获取图片;web_url()函数访问数据;请求方式:HTTP GET 请求;加载指定的Web页面(GET请求

总结——LR学习总结_学习总结_03

2.3    web_custom_request()

将终端信息提交到服务端进行保存;用web_custom_request()函数提交数据:HTTP POST 请求,请求参数为json格式;

总结——LR学习总结_学习总结_04

2.4    bfDeleteRoles

删除前的校验。deleteRoles删除。程序里写的两个向服务器提交数据的方法。不是重复录制。

总结——LR学习总结_性能测试_05

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【选择下一行】:

总结——LR学习总结_性能测试_06

顺序(Sequential:按照参数化的数据顺序,一个一个的来取。

随机(Random:参数化中的数据,每次随机的从中抽取数据。

唯一(Unique:为每个虚拟用户分配一条唯一的数据

 

Update value on【更新时的值】: 

总结——LR学习总结_性能测试_07

每次迭代(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”。

下面将详细说明每个属性值的意义:

1Notfound:指定当找不到要找的动态数据时该怎么处理。当指定Notfound=error时,表示着找不到动态数据时,就发出一个错误消息。此为该属性的默认值。当指定Notfound=warning时,表示当找不到动态数据时,不发出错误消息,只发出警告,脚本也会继续执行下去不会中断。在对脚本出错时,可以如此设置。

2LB:动态数据的左边界字符串。此属性是必须要有的,而且区分大小写。

3RB:动态数据的右边界字符串。此属性是必须要有的,而且区分大小写。

4RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性可以是All或是数字,而且可有可无。

5Search:搜寻的范围,其值可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻headerresource)或是All(搜寻全部范围,此为默认值),此属性可有可无。

6ORD:指明从第几次出现的左边界开始才是要撷取的数据,默认值是1。假如该属性值为All,则所有找到符合的数据会存储在数组中。此属性可有可无。

7SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始存储到参数中。此属性值不可为负数,其默认值为0

8Convert:转换数据格式。当指定该属性值为HTML_TO_URL时,意味着将HTML-encoded数据转成URL-encoded数据格式。如果是HTML_TO_TEXT,表示将HTML-encoded数据转成纯文字数据格式。

9SaveLen:当找到匹配项后,偏移量之后的几个字元存储到参数中。此参数可有可无,默认值是-1,表示一直到结尾的整个字符串都存入参数中.


怎么插入关联函数呢?
根据我的经验,当找到两个脚本的差异后,在对应区域插入关联函数,单击回车键,显示一行为空,在此行可以手动输入关联函数web_reg_save_param"参数名称","左边界","右边界","查询区域",LAST;或单击鼠标右键单击【insert>net step...>add step界面,step type中选择services>web_reg_save_param,单击【ok】键,弹出如下图所示:

总结——LR学习总结_学习总结_08

单击【OK】键,显示如下信息:

web_reg_save_param("lt",
  "LB/IC=name=\"lt\" value=\"",
  "RB/IC=\"",
  "Ord=1",
  "Search=Body",
  LAST);

对脚本中需要参数化进行替代,如下图所示:

总结——LR学习总结_学习总结_09

 

对于确定参数的左右边界,我个人建议是在找到脚本中差异性的地方【LT-68750-afrD2frlzMHDQ1wwDsjlNugZgY0mxw】后复制,然后在Generation Log日志中通过ctrl+F组合键查找,如下图所示:

总结——LR学习总结_学习总结_10

 对于引号需要使用【\】作转义,例如上面的左边界可以写成name\"lt\"  value=\"   ,右边界可以写成\" 

 

第五步:验证关联函数是否正确。

首先设置一下输出日志,在VuGen的工具栏运行时设置【Run-time Settings>log>勾选Enable logging>Always send messages>Extended log>勾选Parameter substitution。个人观念,在负载测试时不需要输出参数日志,改为Standard log日志即可,因为输出参数日志也需要时间。如下图所示:

总结——LR学习总结_学习总结_11

 回放脚本时,会在Replay Log日志中可以显示关联参数的相应值,此值是动态变化的,每一次执行后,显示的值都不一样。如下图所示:

总结——LR学习总结_性能测试_12

 

2       环境配置

2.1    cpu

4cpu8核。 (之前是2cup ,后来调到8cpuCpu 都是2的次幂形式。)看nmonsys_summ 图的%比。

 

2.2    内存

10g内存。(之前是6g内存)。看nmonmem图中memfree  memtotal ,剩余空间和总空间。

 

2.3    线程数

java线程数:来一个用户会占用一个线程,用完随即释放。 我们测试的只是登陆退出,所以退出后线程立马释放。在weblogic 控制台中会显示出线程活动数和空闲数,如果有等待的线程数说明这个线程数不够用。根据处理业务的大小判断,一个cpu可处理25-30个线程。

总结——LR学习总结_学习总结_13

# 调整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改成你需要的值即可,设置完需要重启系统已生效。

 

 

 

总结——LR学习总结_性能测试_14

 

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交换机的。 nmonnet图,1000M / 8 =120 MB/S ,所以图的上行和下行各占60MB/S ,如果超过了,说明网络有问题。

 

 

 

2.9    压力机所能承受的用户数

压力机所能承受的用户数:400左右。 如果过多的话,压力机的内存和cup 和网络就承受不住。

 

 

 

2.10  io读写

io读写:如果数据交互特别多的话,io读写就耗费大。 Nmon上的线合并在一起,就说明磁盘不够用的了,读写后没有及时释放。

 

 

 

2.11  集群环境配置参数:

4cpu 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要单独装一台机器,不然会影响应用服务器的性能。各节点要分开到虚拟机上。反向代理。

总结——LR学习总结_学习总结_15

 

 

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              另一个程序正在运行

也许大家遇到过这样的问题,如图:

总结——LR学习总结_学习总结_16

解决方法:打开任务管理器:找到这个进程:ThumbProcess.exe,关掉这个进程即可解决。

总结——LR学习总结_学习总结_17

 

4.2              事物响应时间一直处于直线状态。

解决方法:参数化设置成Unique

脚步中去掉EXTRARES下面的URL下载;

场景运行时设置忽略思考时间和log日志时间。

 

 

4.3              运行时,有部分用户一直结束不了

  换个LR 试试。 或者是卸载了重新装一个英文版的, 中文版的好出这种问题。

 

4.4              脚本中产生多次请求

1.    使用loadrunner进行录制脚本之后,可以看到的在脚本有一个请求,会产生两次

总结——LR学习总结_性能测试_18

2.    进行点击录制的按钮,进入到录制选项中,进行点击option按钮。

总结——LR学习总结_学习总结_19

3.    进行点击列表中的port mapping中选项按钮。

总结——LR学习总结_性能测试_20

4.    然后在network port mapping中已经被选择为了socket level and winnet data,进行点击

总结——LR学习总结_学习总结_21

5.    弹出了下拉菜单中进行选择为socket level data的选项。

总结——LR学习总结_性能测试_22

6.    6

在此重新录制脚本之后可以看到的在脚本只有一个请求的脚本的。

总结——LR学习总结_性能测试_23

 

4       LR 实例分析

4.1              查询数据库的进程数。

现在已经超载了,所以weblogic建连接池建不了。程序报错。

Show parameter process;

Select count(*) from v$process;

总结——LR学习总结_学习总结_24

 

 

 

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的调优主要从SEVERExecuteQueueJDBC等几个方面的相关参数进行调优:

 一、SERVER

 mydomain->Servers->myserver->Configuration->Tuning->Enable Native IO”中:

 1Native IOEnabled  TRUE,表示该Server使用本地I/O 

2SocketReaders 设置在执行线程中专用做Socket Readers的百分比

3Maximum Open Sockets 最大打开Socket

 4Stuck Thread MaxTime

 堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程。如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。注意:执行线程的数量一旦增加,目前weblogic不会去减少他,如果增加了一些线程以后再次出现

overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。

 例如可以改成:默认600 改成1200 

5Stuck Thread Timer Interval 

系统检查堵塞线程的时间间隔

6Low Memory GC Threshold 

当可用内存小于该百分比时,垃圾回收启动

7Low Memory Granularity Level 

当两次检测的可用内存变化超过该百分比时,垃圾回收启动

8Low Memory Sample Size 

在一次检测中的取样次数

 9Low Memory Time Interval 

检测间隔时间

10Accept Backlog 

等待队列中最多可以有多少TCP连接等待处理,如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25

 

7.4              ExecuteQueue

 mydomain->Servers->myserver ->Monitoring->Monitor all Active Queues... 

->Configuration->weblogic.kernel.Default-> 

 

1ThreadCount 

服务器初始创建的执行线程的数量,设置原则:

增大机器的最大并发线程数使处理器利用率达到最大,并发线程数理论上等于,够用即可,过大会降低系统性能。建议:查看当前配置,确定当前系统cpu核心数,可按每核心支持

20线程数进行配置。11g可能需要通过修改xml配置文件进行设置。

 2QueueLength 

在等待队列里的请求数,理想状态下是

 3QueueLength Threshold Percent 

一个百分数,当request的数量达到队列长度的这个比例的时候,weblogic会发出overflow

的标志信息

 4ThreadsIncrease 

如果weblogic发出overflow的标志信息,weblogic会尝试增加这个数量的执行线程,以解决

处理矛盾

 5ThreadsMaximum 

最大执行线程数

 6Threads Minimum 

最小执行线程数

7ThreadPriority 

线程优先级

 

7.5              JDBC

service->JDBC-> JDBC Connection Pools->Configuration->name->Connections 

1Initial Capacity 

初始数据库物理连接数

 建议设置为15-20之间

 2MaxCapacity 

最大数据库物理连接数

 根据数据库本身所支持的最大连接数进行设置,建议设置为数据库最大连接数的80%

 3Capacity Increment 

每次数据库物理连接增加数

 4Statement Cache Type 

prepared statements缓存的策略,LRU算法在有新的语句到来时,将最不经常被用得语

句调整出缓存。FIXED算法为先进先出的算法

 5TestConnectionsOnReserve 

 TestConnectionsOnReserve设置为false(缺省设置)。如果此参数设置为真(

true),则在连接被分配给调用者之前,都要经过测试,这会额外要求与数据库的反复连接

 6Statement Cache Size 

宏语句设定的静态缓存,大小由JDBC连接池配置时指定,调整这个数值的大小,有利于提高系统的效率调整缓存大小:

 7Login Delay 

创建数据库物理连接时的延时时间

 

7.6               监控日志

 1server log 

系统启动及运行过程中的日志,可在weblogic管理端中进行配置。

 2access 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 -27727

Step 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

处理方法:
  Run-Time Setting ------ Internet Protocol ------ Preferences ------Option   ------ Step download timeout(sec)改为32000

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 ProtocolPreferences">"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}

造成HTTP500错误,有朋友告诉我如下几个可能:

1、运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误。减小用户数或者场景持续时间,问题得到解决。

2、该做关联的地方没有去做关联,则报HTTP500错误。进行手工或者自动关联,问题得到解决。

3、录制时请求的页面、图片等,在回放的时候服务器找不到,则报HTTP500错误,若该页面无关紧要,则可以在脚本中注释掉,问题将会得到解决。例如:有验证码的情况下,尽管测试时已经屏蔽了,但是录制的时候提交了请求,但回放的时候不存在响应。

4、参数化时的取值有问题,则报HTTP500错误。可将参数化列表中的数值,拿到实际应用系统中进行测试,可排除问题。

5、更换了应用服务器(中间件的更换,如tomcatwebspherejboss等),还是利用原先录制的脚本去运行,则很可能报HTTP500错误。因为各种应用服务器处理的机制不一样,所录制的脚本也不一样,解决办法只有重新录制脚本。

6Windows 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模式加压,存在如果持续长时加压时LoadRunnerController会报 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 timeoutsec

2> 问题描述:

ErrorFailed to connect to server“192.168.2.192”[10060]Connection

Errortimed out ErrorServer“192.168.2.192”hasshut down the connection prematurely

原因:

1> 应用访问死掉

小用户时:程序上的问题。程序上存在数据库的问题

2> 应用服务没有死

应用服务参数设置问题

例如:

在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25

Java连接池的大小设置,或JVM的设置等

3> 数据库的连接

在应用服务的性能参数可能太小了

数据库启动的最大连接数(跟硬件的内存有关)

3> 问题描述

ErrorPage download timeout120secondshas 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。添加ip2种方法:1种方法是使用loadrunnerIp 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 LoggingAlways 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.1ok,在测试机器上添加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协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示"Errorserver 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.actionHTTP状态代码=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

共享内存缓存溢出,造成ControllerLoad 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