1、2012/04/19 LR 测试常见问题积极决方案-周春艳LoadRunner 常见问题整理1 录制脚本问题1.1 HTTP 脚本问题1.11 LoadRunner录制脚本时为什么不弹出 IE浏览器?1一台主机上安装多个浏览器时,LoadRunner 录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。启动浏览器,打开 Internet 选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动 )”的勾选,然后再次运行 VuGen 即可解决问题提示:通常安装 Firefox 等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行 LoadRunner 得主机上保持一
2、个干净的测试环境。2在系统中安装了多个浏览器需在“program to record”中指定需要启动的浏览器的可执行文件。2012/04/19 LR 测试常见问题积极决方案-周春艳3览器的版本应与 loadrunner 的版本一致。LR 8-IE6LR9-IE7LR11-IE84操作系统有关windows server 在有数据执行保护,应将 vugen.exe 加入不受系统的保护项。2012/04/19 LR 测试常见问题积极决方案-周春艳1.12 录制脚本为空LR 录制是客户端与服务器的数据交互,只有在有交互的时候才可以录制到脚本。A 、(1) 交互方式若是通过客户端的 server 进行
3、交互,则在 script 中选择最后一个track processes created as COM local servers ,把 script 里的最后一个选项选上 就好了。2012/04/19 LR 测试常见问题积极决方案-周春艳(2 )若是非客户端与服务器的交互操作,在页面上点前进或后退,如果页面是从缓存中取出来的,那么也就没有和服务器数据交互,所以也录制的为空脚本。 在windows 注册表中禁用缓存就好了 .(3 ) 协议选择错误,b/s 不一定走 http 协议,还可能是 https(hypertext transfer protocol over secure socket
4、layer)协议。2012/04/19 LR 测试常见问题积极决方案-周春艳B、选择 internet 选项里的连接里的局域网设置的代理不能选,因为 LR 在录制的时候会动态选择。C、网页里的恶意代码,检测的时候响应 LR 录制脚本用工具检测恶意代码,然后卸载恶意代码,例如:Ad_Aweare ,这个可能性不大。D、防病毒软件和防火墙,在录制时暂时关闭。E、 因为 LR 自身原因报错或者有些脚本不能录制下来,录制时最好选用 view script,此时会报错,但能录下脚本,是因为 LR 无法解析,可以手工修改,而 view tree 就直接停止了。1.13 录制 Web脚本时,生成的脚本中存在
5、乱码该如何解决?第一步:2012/04/19 LR 测试常见问题积极决方案-周春艳录制脚本前,打开录制选项配置对话框 Record-Options,进入到 Advanced 标签,先勾选“Support charset”,然后选择中支持 UTF-8。再次录制,就不会出现中文乱码问题了。第二步:服务器响应报文中显示乱码若是录制的脚本在切换到 Server Response 中,所有的中文全部变成乱码,如“ 勌缞仫訆” 。原因是服务器端没有把响应的编码设置为 gb2312,在 IIS 中找到 Web.Config 文件,在.节加入后再次录制脚本,乱码变中文。还有另一种情况:是录制的脚本里有乱码,但
6、是不影响回放,测试中需要对其进行参数化,我们可以通过字符串编码转换的函数 lr_convert_string_encoding( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName)进行转换:lr_convert_string_encoding(lr_eval_string(“name“),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,“str“);strcpy(tmp,lr_eval_string(“str“); 第三步:回放过程
7、中,LR 的快照中显示乱码解决方案:2012/04/19 LR 测试常见问题积极决方案-周春艳在 Run-time settings 下 Browser Emulation 中点击 change。 。按钮在 User-Agent 对话框中更改 Browser 的类型和版本。1.14 ERROR:not found the correlation Parameter。Memorry violation1.关联错误,检查关联的内容是否正确,左右边界取值是否准确很多时候,在关联的左右边界中是不分大小写的。2.关联较多时如果左右边界不唯一,会出现左右边界分不清的情况,参数值也会取不到。解决办法有两种:
8、一、左右边界可以取长点直到可以唯一标识关联参数时;二、如果需要的关联很多,可以利用 ORD控制(ord 用来确定第几次出现的值,是要关联的值 ,默认值为 1,就是第一次出现的值为关联的值,而设置成 ALL则表示关联全部存在于左右边界的值,ord=all时可以使用参数数组) 。在 9.x的版本中提供了三个关于 Ord的主要函数: lr_paramarr_lenlr_paramarr_idxlr_paramarr_random2012/04/19 LR 测试常见问题积极决方案-周春艳1.15 关联报错:Action.c(20): Error -26377: No match found for t
9、he requested parameter “xxxxxx“. Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size MsgId: MERR-26377这个问题是因为存放参数的缓冲区大小默认为 1024个字节,也就是 1k,比较小。应该根据需要进行调整。解决方法:web_set_ma
10、x_html_param_len()函数可以自定义关联返回值存放的参数的最大长度,且一定要写在关联函数前面.1.16 问题描 Error-27257: Pendingweb_reg_save_param/ reg_find/create_html_param_ex request(s) detected and reset at the end of iteration number 1解决方法:web_reg_save_param 位置放错了,应该放到请求页面前面。且在插入文本检查点时,正确写入 web_reg_find 的参数值,通常 TextPfx和 TextSfx中会包含特殊字符如:双
11、引号,等特殊字符,需要进行转义(用斜杠)例如:web_reg_find(“Search=Body“,“SaveCount=Welcome“,“TextPfx=欢迎“,“TextSfx=“,LAST);1.17 为什么脚本中添加了检查方法 Web-find,但是脚本回放时却没有执行?由于检查点功能会耗费一定的资源,因此 LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置 Run-time Setting。2012/04/19 LR 测试常见问题积极决方案-周春艳进入“Run-time Setting”对话框,依次进入“Internet ProtocolPre
12、ferences”,勾选 Checks下的“Enable Image and text check”选项即可。检查执行结果时推荐使用 web_reg_find方法。1.18 一些 Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于 1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是
13、每次迭代时模拟一个新的用户及每次迭代时清除缓存。由于脚本迭代时,init 和 end只能执行一次,如果每次都模拟一个新的用户并清除缓存,则用户登录信息将一并删除,迭代式可能会出现问题。2012/04/19 LR 测试常见问题积极决方案-周春艳1.19 LoadRunner请求无法找到:在录制 Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。 错误现象:Action.c(41): Error -27979: Requested form. not found MsgId: MERR-27979 Action.c(41): web_submit_form. highe
14、st 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”模
15、式进行录制。 解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based script”,单击“HTML Advanced”,选择“Script. Type”为“A script. containing explicit”。然后再选择使用“URL-based script”模式来录制脚本。2012/04/19 LR 测试常见问题积极决方案-周春艳注: HTML-based 方式和 URL-based 方式的区别HTML-based 方式对
16、每个页面录制形成一条语句,对 LoadRunner来说,在该模式下,访问一个页面,首先会与服务器之间建立一个连接获取页面的内容,然后从页面中分解得到其他的元素(component),然后建立几个连接分别获取相应的元素。URL-based 方式将每条客户端发出的请求录制成一条语句,对 LoadRunner来说,在该模式下,一条语句只建立一个到服务器的连接,LoadRunner 提供了 web_concurrent_start和 web_concurrent_end函数模拟 HTML-based的工作方式。如何决定选择何种录制方式?1、如果应用是 WEB应用,首选是 HTML-based方式;2、
17、如果应用是使用 HTTP协议的非 WEB应用,首选是 URL-based方式;3、如果 WEB应用中使用了 java applet程序,且 applet程序与服务器之间存在通讯,选用 URL-based方式;4、如果 WEB应用中使用的 javascript、vbscript 脚本与服务器之间存在通讯(调用了服务端组件),选用 URL-based方式。2012/04/19 LR 测试常见问题积极决方案-周春艳1.20 在录制一个应用的过程中,需要进行查询操作,若查询的返回结果过多,引起后续的脚本无法继续录制。这是由于 loadrunner所能处理的数据条目小于返回的数据条目,导致了loadru
18、nner不能处理返回的值。可以通过修改 vugen.ini文件中的 CmdSize=xxxxxxx的值,使得 loadrunner所能处理的数据条目大于查询返回的数据条目。1.2 socket 脚本开发问题1.21 接收报文为空一般来说 socket 接收报文为空主要因为发送报文不正确而出现接收为空。解决办法也很简单,检查参数化是否有问题或者重截报文。参数化的一般原则是: 1、参数化文件尽可能少,因为参数是放在内存中的,占用了内存的资源;2、参数化文件与脚本分离;3、参数文件的路径应该以相对路径来取;4、一些时候为了使参数更具有真实性,参数应该从数据库中来获得;5、参数类型的选择;6、参数的数
19、据一般要由业务决定;1.22 运行脚本时出现跳参在执行建立账户时出现跳过参数导致交易失败的问题。可能是 Thinktime 设置过小导致的,时间延长后还是存在,只是减少了许多。2012/04/19 LR 测试常见问题积极决方案-周春艳1.23 出现运行脚本错误,会出现如下提示,另存脚本也报错。这种情况可能是在移植脚本时数据丢失,另一种原因是在上次打开或脚本执行时系统里面有了该脚本的死进程。解决办法:首先查看脚本的各个部分是否正确,最好点一下程序编译检查错误,如果没有错误,新建脚本把里面的东西拷贝过去。也可以先看看系统是否有死进程结束掉或者重启机器。1.24 有些脚本在 lr中运行一段时间会被卡
20、死A、报文接收长短不一致。如:60480 客户查询交易,以前总是迭代到二百次左右时会被卡死,经查看是接收报文长度不一样造成的,后来用 LR 自带的 EndMark 函数进行截取接收报文中的有效信息,就可以解决这个问题。B、数据量过大造成脚本卡死。由于 LoadRuuner 自带的 Bug,所以在脚本运行时间较长、数据量大时会出现 ERROR 错误,程序无法终止,点击一下 error 脚本迭代一次,造成效率大幅下降。后来只能结束进程。原脚本也因为有些进程死掉不能再运行。然后另存新脚本才能继续运行。1.25 对 run-time setting 设置失败打开 run-time setting会弹出
21、 Failed to load run logic file2012/04/19 LR 测试常见问题积极决方案-周春艳点击确定会出现 run-time setting设置窗口,对其设置之后会提示设置保存失败。此问题出现的原因是配置 loadrunner 加载运行时设置的 default 文件丢失。把其脚本的default 文件拷贝过来一个放在脚本里目即可。1.26 使用 IP欺骗出现的问题问题描述:The IP wizard does not support DHCP-enabled network cards.2012/04/19 LR 测试常见问题积极决方案-周春艳Your cards a
22、re either DHCP-enabled or configured with invalid settings.Please contact your system administrator.解决办法:首先,本地的 IP 设置不能为“自动获取”,必须指定一个静态 IP。其次,所添加的 IP 只能是局域网内的网段只能添加 192 段,127 段, 10 段 IP 地址如何使用 IP 欺骗功能详情参考IP欺 骗 方 法 .txt2 场景问题2.1 HTPP 场景问题2.11在 Controller中运行 Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?(1)错误现象:Ac
23、tion.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)解决办法: 一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。增加一下运行时的超时设置,在“Run-Time Settings”“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout”或者“HTTP-request receive”的值。2012/04/19 LR 测试常见问题
24、积极决方案-周春艳增加运行时超时设置图如果问题没有解决,还可以换一个回放方式试试。(2)错误现象:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http:/172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ 2012/04/19 LR 测试常见问题积极决方案-周春艳subOrderQuery.do 错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。
25、如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。 解决办法:例如上面的错误现象问题定位在某个 URL上,需要再次运行一下场景,同时在其他机器上访问此 URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。如果再次运行场景后还有超时现象,就要在各种结监测果图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。 2.12问题描述 HTTP Status-Code=500 (Internal Server Error) ,HTTP Status-Code=
26、404(Internal Server Error)(1)错误现象:-500 Internal Server Error 服务器内部错误,脚本运行停止。错误分析:应用服务宕掉,或当应用系统处于的可用内存处于阀值以下时,出现 HTTP Status-Code=500的概率非常高,此时只要增加应用系统的内存,问题即可解决,若是服务器宕机,则只需重启。其实,500 错误不止这两个原因,压力太大,脚本录制后关联是否正确,参数化取值错误也会造成 500的错误,而应用服务器参数设置太大或系统开发程序有问题也能导致500的错误,最常见的空指针。(2)错误现象 404:-404 Not Found 服务器没有
27、找到与请求 URI相符的资源,但还可以继续运行直到结束。 错误分析:此处与请求 URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。2.13 ERROR:missing newline in d:loadrunnername.dat场景执行时出现这个错误,第二次就不再出现了两种方法:如果参数不多直接 LR提供的参数表格中修改;如果参数很多在记事本中编辑完之后要加一个回车,让光标指到下一行。2012/04/1
28、9 LR 测试常见问题积极决方案-周春艳这个问题只限于 LoadRunner9.2以前的版本。2.14测试结果中,Summary 和平均事务响应时间图里的各个事务的最大值、平均值、最小值显示不一样的问题?主要是受采样时间的影响。Summary 里的事务平均响应时间是根据整个场景执行过程得到的数据计算所得,最大值与最小值也是从整个场景中得到的。平均事务响应时间图主要时按照 LoadRunner分析出来的采样频率来获取事务响应时间的最大值与最小值,然后计算平均值。可以通过“Set Granularity“来修改平均事务响应时间图的采样频率。如果把“Granularity“设为场景执行时间,则统计结
29、果将会一致。通过更改 X轴的粒度(比例),可以使图便于阅读和分析。为确保可读性和清晰性,Analysis 在大于等于 500秒的范围内自动调整图的最小粒度。如果要使数据库减小,可增加粒度。如果要重点关注更详细的结果,可减少粒度,粒度越低,结果越详细。而且通过 view菜单栏点击 View Raw Data可以查看原始数据。2012/04/19 LR 测试常见问题积极决方案-周春艳我们还可以通过“Result Collection”选项卡可以配置 Analysis 以生成和显示摘要数据或完整数据。在工具-options-resultcollection 设置各个选项。各项的具体解释在2012/0
30、4/19 LR 测试常见问题积极决方案-周春艳2.2 Socket 场景问题2.21在场景执行中,异步交易 socket连接中断,同步交易正常进行。在 bancs 稳定性测试中遇到过该问题,经过检查并不是系统出现故障导致服务中断,而是 loadrunner 种场景设置的问题。由于分端口进行测试异步脚本分成了四个,在流水号取值时必须唯一,然而在场景设置中我们用了很大的数据表示流水,用随机的方式取参,本以为不会重复,但问题还是出现了,修改为固定取值时,该问题解决了。这个问题虽然是在特定的场合出现,但是在其他类似场景中参数取值时要慎重考虑。可以采取固定取值或者分块取值。2.22长连接与短连接对场景的
31、影响1.长连接 Client方与 Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。 2.短连接 Client方与 Server每进行一次报文收发交易时才进行通讯连 接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个 Client连接一个 Server.一般 WEB网站的 http服务都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像 WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用短连接,同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。在
32、 bancs测试中脚本里设置的长连接在压力较大的情况下会出现这样的问题:假如一支交易的接收报文是可变长的,这样会影响脚本执行的效率,为了简便我们只需要截取接收报文里面的某些可以确定交易成功的信息就可以了,其它的可以不要,这就造成了第二笔交易因接收到第一笔交易的剩余报文而报错的现象。改为短连接后每次连接都会初始化配置,这就解决了报文接收错误的问题。2.23 在外围测试中查看后台日志发现交易总是少一笔。解决办法:通过查看,发现是由于异步交易,只发不收,最后一笔发完还没来得及处理 socket连接就已结束,在 socket连接断开前设置一个 thinktime就解决了。2012/04/19 LR 测
33、试常见问题积极决方案-周春艳2.3 共性问题2.31 虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?如果选择“Run Vuser as a process” ,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个 mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选 项。另外,如果启用了 IP欺骗功能,则先在 Controller中选中 Tools菜单下的“Expert Mode”,然后将 Tools菜单下的“OptionsGeneral”标签
34、页中的 IP地址分配方式也设置为与 Vuser运行方式一致,同为线程或进程方式。2.32 thinktime与 pacing的设置对脚本及场景的影响在我测试的过程中在稳定性测试场景中有一次我对场景中的一个脚本取消了 pacing设置,结果导致 VU退出,出现了内存冲突的错误。在我们测试中 BancsLink_C63601_C63603_短信功能定制和删除、 BancsLink_C60422_C60423_活期与定期批次转出关联、BancsLink_C67050_C67000_修改客户信息提示等交易,不加 thinktime时也会报错。首先我们要明确设置他们的意义。Pacing是通过设置两次迭代
35、之间的间隔时间,来调整各个 action之间的步调。从定义上来看,它是和 iteration绑定在一起的。Pacing 的设置可以调节系统压力的大小,影响系统处理事务的能力。在场景运行中 pacing的设置是很重要的。Think time是通过设置思考时间,来模拟真实用户在操作过程中的等待时间。从定义上来看,它是在 iteration内部的某个 action中各个步骤的间隔时间,主要目的在于模拟真实用户操作情况,在测试中使虚拟用户对业务的操作更接近实际。示例:假设用户进行一次操作会消耗 5秒钟的时间,即完成整个迭代需要 5秒钟。如果用户不停顿,继续第二次重复操作,则同样耗费约 5秒左右的时间。
36、但是真实世 界中肯定是有停顿的。一个真正的用户,做完一系列操作后,会间隔一段时间。假定用户停顿了 5秒,再第二次重复操作,则一共耗费 10秒钟时间。映射到 loadrunner 中,就需要在一次 iteration中,设置一个 thinktime = 1秒,然后在两个 iteration之间,设置一个pacing为 5秒。2012/04/19 LR 测试常见问题积极决方案-周春艳2.33 在运行场景中两个 vu并发时交易出现错误,在脚本中没有出现这种情况。查看日志发现两 vu所使用的参数值是一样的,所以在接收报文时 VU不能对应的找到自己的接收报文。解决办法 1、在场景中修改 VU家在策略,有
37、一次全部加载改为逐步加载。2、改变取参策略,把数据分块,然后分到固定的 VU。2012/04/19 LR 测试常见问题积极决方案-周春艳2.34 题描述 Deleted the current transaction . since response time is not accurate出现这个问题时 TPS大幅下降,VU 并没有掉。这个问题不多遇见,在调试稳定性测试场景中遇到几次。一般出现在压力机器上发生 ping值为负数时,可以重新启动 pc机或者打补丁,如果还不行把场景另存. 2.35 日志缓存过小: to Log cache is too small to contain the
38、message.由于场景中 Auto Log cache默认设置为 1k,但是遇到报文较长的交易时自动日志缓存的容量就太小了我们就得手动修改。2.36 运行中掉 VU。1、出现 Action.c(35): Error : save param parameter is invalid. Error code : 9005. Error - memory violation : Exception ACCESS_VIOLATION received.内存冲突的问题很普遍,有些程序设置之间的冲突也会导致这个错误,就脚本里来讲,HTTP 录制的脚本里面关联错误会导致内存冲突;在 socket协议的脚
39、本里判断成功时我们一般采用字母、数字与存储在缓冲区里的报文做匹配,但是我们存在缓冲区里面的报文是二进制格式的,所以在场景中也会造成内存冲突,最后掉 VU。可能一个很小的问题就会引起内存冲突。2012/04/19 LR 测试常见问题积极决方案-周春艳2、内存资源不足:脚本中的事务执行后没有释放 buffer,最好在每个事务结束后就释放 buffer。3、压力过大:压力过大导致本地存储收回报文的存储空间不足,写不了日志也会掉 VU4、参数取值不正确也可能导致掉 VU5、系统自身原因。总体来说,解决方法就是调整脚本、分成多台压力机进行测试。2.37 为什么 Windows系统中的 CPU、内存等资源
40、仍然充足,但是模拟的用户数量却上不去?在 Windows计算机的标准设置下,操作系统的默认限制只能使用几百个 Vuser,这个限制与 CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改 Windows注册表。以 Windows XP Professional为例。(1)打开注册表后,进入注册表项 HKEY_LOCAL_MACHINE中的下列关键字:SystemCurrentControlSetControlSession ManagerSubSystems。(2)找到 Windows关键字,Windows 关键字如下所示:%SystemRo
41、ot%system32csrss.exe bjectDirectory=WindowsSharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2ProfileControl=Off MaxRequestThreads=16SharedSection=1024,3072,512 关键字的格式为 xxxx,yyyy,
42、zzz。其中,xxxx 定义了系统范围堆的最大值(以 KB为单位),yyyy 定义每个桌面堆得大小。(3)将 yyyy的设置从 3072更改为 8192(即 8MB),增加 SharedSection参数值。通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的 Vuser。这意味着能够模拟的最大并发用户数量将不受 Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。2.38 问题描述 open many files问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法: 2012/04/19 LR 测试常见问题
43、积极决方案-周春艳1、修改操作系统的文件数限制,aix 下面修改 limits下的 nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改。 2、方法一解决不了情况下再去查看应用服务器 weblogic的 commonEnv.sh文件,修改其中的 nofiles文件 max-nofiles数增大,应该就可以通过了,具体就是查找到 nofiles方法,修改其中 else条件的执行体,把文件打开数调大。修改前记住备份此文件,防止修改出错。 3、linux 上可以通过 ulimit HSn 4096来修改文件打开数限制,也可以通过 ulimit -a 来查看。 4、linux
44、上可以通过 lsof -p pid | wc -l 来查看进程打开的句柄数。 2.38 LoadRunner与服务器连接时遇到的问题(1)ERROR:sck connect Aborted这种错误一般是软件造成连接中断。由于软件错误,造成一个已经建立的连接被取消,比如 LoadRunner自身的 bug,在发报文时多位。典型情况下,这意味着连接是由于协议或超时错误而被取消的。(2)ERROR :Failed to connect to server这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器) ,一个网络延迟严重,解决办法: 1、 修改负载机器的 tcpde
45、laytime注册表键值,将其改小改小; 2、 检查网络延迟情况,看问题出在什么环节; 为了减少这种情况,最好测试中有个干净的网络环境,每个负载机器的压力测试用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就会减小。 (3)ERROR:has shut down the connection prematurely分为以下三种情况:1.应用访问死掉 小用户时:程序上的问题或数据库的问题 ,应该查看一下 sql执行效率和 JAV的垃圾回收情况,具体定位问题。2.应用服务没有死 应用服务参数设置问题 例如: 在许多客户端连接 Weblogic应用服务大部分被拒绝,而在服务器端没有
46、错误显示,则有可能是 Weblogic中的 server元素的 AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加 25。 Java 连接池的大小设置,或 JVM的设置等 3. 数据库的连接 在应用服务的性能参数可能太小了 数据库启动的最大连接数(跟硬件的内存有关) 2012/04/19 LR 测试常见问题积极决方案-周春艳(4)ERROR: connection refused.这种情况比较复杂,需要检查几个地方,不同的操作系统也会有不同的操作方式。1首先检查是不是连接 weblogic服务大部分被拒绝,监控 weblo
47、gic的连接等待情况,可能与上面的一样需要增加 AcceptBacklog,如果没有解决问题,还要增加增加连接池,调整线程数, (连接池数*Statement Cache Size)的值应该小于数据库连接数的最大值。2查看服务器的操作系统中是否对连接数做了限制,AIX 下可以直接编辑 limit文件,修改连接数、端口数的限制以及 tcp连接等待时间的间隔大小。若是 windows系统,则要修改其注册表,修改 TcpTimeWaitDelay(默认值 30s)和 MaxUserPort(可以调到小于最大值)项,键值在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetTcpipParameters。因为当负载生成器的性能很好时,发数据包特别快,服务器响应也很快,从而导致负载生成器的端口在没有timeout之前就占满了。端口没有可用的时候就会出现错误, 。执行 netstat-na命令,可以查看端口。如果调整了 TCP的 timeout,情况会好点,在端口还没有占满前就有释放的了。附:LoadRunner 错误码汇总。