51Testing软件测试论坛

标题: LR脚本运行中出现内存泄露问题 如何解决 [打印本页]

作者: 孤单芭蕾lonely    时间: 2012-2-1 16:55
标题: LR脚本运行中出现内存泄露问题 如何解决
用LR录制脚本之后,在脚本中添加如下代码

int index;
int length;
char str[100], *sessionID;
。。。。。
strcpy(str, lr_eval_string("{sID}"));
sessionID = str;
sessionID+=12;
。。。。。
其余的脚本都是LR自动生成的,VUGEN运行无误
但当我用controller按照既定场景对脚本进行运行的时候,发现mmdrv.exe进程所占用的内存不断增加,运行时间过长就会导致内存溢出,controller停止运行

想请教一下各位大侠,这种内存泄露,是不是因为我添加的那部分脚本导致的,如果是的话,如何解决?如果不是的话,应该如何排查导致内存泄露的脚本位置?
望诸位多多指教,感激不尽。。。
作者: 云层    时间: 2012-2-1 17:30
free一下变量
作者: 孤单芭蕾lonely    时间: 2012-2-1 17:31
期待明早能看到各位大侠的回复。。。
作者: fox7584    时间: 2012-2-1 18:10
云层不是说了吗?你把变量用完后,清零。
作者: 孤单芭蕾lonely    时间: 2012-2-2 08:44
首先,我表示,云层的回复,我在自己顶贴的时候还没看到,对此表示歉意
其次,周遭的人都说,不用malloc申请的变量,就不需要用free释放了,所以我不知道,我这样定义的变量到底用不用释放,如果需要释放,直接用free就行么?还望各位高手指点一二。
作者: shigejinian1    时间: 2012-2-2 09:05
你直接free sessionID 执行下试试呗。
作者: 孤单芭蕾lonely    时间: 2012-2-2 09:13
还有。。。。如何区分到底是脚本造成的内存泄露还是被测系统造成的内存泄露?
作者: mvvztt    时间: 2012-2-2 09:20
我觉得如果被测系统造成的内存泄露的话,可以看服务器的日志,里面会有相关内容的
作者: 孤单芭蕾lonely    时间: 2012-2-2 09:51
回复 8# mvvztt


    请问 服务器的日志怎么看?最好给个例子。。。
作者: 孤单芭蕾lonely    时间: 2012-2-2 09:52
我把指针和数组都进行了free操作,可是mmdrv还是在不断的吃掉内存。。。而且脚本在不同的机子上跑过,结果是一样的。。。诶 我无奈了
作者: 孤单芭蕾lonely    时间: 2012-2-2 09:53
回复 2# 云层


谢谢云层的指点。。。   
变量free了,mmdrv还是在不断的涨。。。。另外,我用的是LR11
作者: mvvztt    时间: 2012-2-2 15:04
回复  mvvztt


    请问 服务器的日志怎么看?最好给个例子。。。
孤单芭蕾lonely 发表于 2012-2-2 09:51



    你用的是什么服务器嘞~~~我用的是tomcat,目录下就有logs目录,可以看的,问你们的开发就知道了,呵呵
作者: 孤单芭蕾lonely    时间: 2012-2-2 16:23
回复 12# mvvztt


    谢谢你的回复 初步验证 不是系统内存泄露的问题
诶~纠结中。。。
作者: sculley    时间: 2012-2-7 14:49
sessionID+=12;
这是什么意思,sessionID不是指针吗,这样操作也行
作者: 泊涯    时间: 2012-2-8 09:40
sessionID 写法问题
作者: mvvztt    时间: 2012-2-8 14:30
回复  mvvztt


    谢谢你的回复 初步验证 不是系统内存泄露的问题
诶~纠结中。。。
孤单芭蕾lonely 发表于 2012-2-2 16:23



    想知道是否是被测系统造成的内存泄露,还有一个办法就是使用内存泄露检测工具,看看这个帖子http://bbs.51testing.com/thread-87138-1-2.html
作者: 孤单芭蕾lonely    时间: 2012-2-9 11:13
回复 14# sculley


    谢谢sculley的回复
这个操作的目的是移动指针的初始位置,让它指向数组的第13个字符,截取从这个字符还是的数组作为关联时要用到的数据
作者: 孤单芭蕾lonely    时间: 2012-2-9 11:14
回复 15# 泊涯


    谢谢泊涯的回复
你所谓的写法问题,和sculley是一个意思么?还是其他的什么意思 麻烦解释一下
作者: 孤单芭蕾lonely    时间: 2012-2-9 11:18
对于sessionID所用到的地方。。。在这里再多附上一段代码 希望可以有助于我所表达的意思:
。。。。。。
        lr_xml_get_values("XML={xml}",
                          "FastQuery=/AMFPacket/AMFHeaders/AMFHeader/string",
                          "ValueParam=sID",
                          LAST);
        strcpy(str, lr_eval_string("{sID}"));
        sessionID = str;
        sessionID+=12;

        flex_amf_call(
                "AMF3_call_1",
                "Gateway=http://192.168.6.125:8080/sbs/messagebroker/amf;jsessionid={sessionID}",
                "Snapshot=t42.inf",
                MESSAGE,
                "Method=null",
                "TargetObjectId=/1",
                BEGIN_ARGUMENTS,
                "<AMF3><object-externalizable-custom><flex.messaging.messages.RemotingMessage>\n "
                " <destination>versionController</destination>\n  <messageId>"
                "DC9C0DBE-9D1C-869C-CE6E-EADC775BB071</messageId>\n  <timestamp>0</timestamp>\n  "
                "<timeToLive>0</timeToLive>\n  <headers>\n    <entry>\n      <string>"
                "DSEndpoint</string>\n      <string>my-amf</string>\n    </entry>\n    <entry>\n "
                "     <string>DSId</string>\n      <string>"
                "{dsID}</string>\n    </entry>\n  </headers>\n  "
                "<operation>getVersion</operation>\n  <parameters/>"
                "\n</flex.messaging.messages.RemotingMessage></object-externalizable-custom>"
                "</AMF3>",
                END_ARGUMENTS,
                LAST);
。。。。。。
作者: aakkii    时间: 2012-2-9 16:41
因为是loadrunner11中的flex协议不完善造成的,打上patch1和2解决问题。
作者: aakkii    时间: 2012-2-9 16:43
因为是loadrunner11中的flex协议不完善造成的,打上patch1和2解决问题。
作者: swordsman    时间: 2012-2-14 15:06
如果用lr 9 也出现这样的问题,怎么处理?
也打patch?
作者: 孤单芭蕾lonely    时间: 2012-2-22 14:21
回复 20# aakkii


首先谢谢你的回复。。。   
我知道LR9.5中flex协议不完善,有个patch1和patch2。。。你的意思是说LR11也有patch1和2?你也有过这样的经历么?
作者: haibinpark    时间: 2012-2-23 15:59
学习先了。
作者: 孤单芭蕾lonely    时间: 2012-2-27 14:03
回复 22# swordsman


    LR9.5对flex的支持的确不够完善,所以,有一个patch1和patch2可以把LR9.5升级至9.52,用来完善对flex的支持,但升级过程存在一定的风险,有可能会导致LR不可用,当然,正常情况下可以成功升级。但跟LR11相比,9.52对flex的支持,依旧是比较简单的。
作者: ottobaby    时间: 2012-3-4 18:21
想知道,这个问题解决了木有??
作者: 孤单芭蕾lonely    时间: 2012-3-5 10:24
回复 26# ottobaby


    不好意思,依旧没有解决。。。但貌似是LR自己的问题,并非脚本的错误,当然,如果有人有解决办法,欢迎 共享
作者: aakkii    时间: 2012-3-27 15:06
LR11也有patch1和2啊,装上内存问题就好多了。
作者: 小鱼干吃虾米    时间: 2015-12-9 10:14
请问楼主的问题解决吗~~




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2