51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 33130|回复: 36
打印 上一主题 下一主题

如何发现客户端软件中的内存泄露?(08-06-06)(获奖名单已公布)

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-6-6 18:28:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    这里的客户端软件包括C/S系统的客户端和B/S系统中的客户端控件,当用户使用客户端软件时,如果发现我们的软件会吃内存,那是很丢面子的事,有哪些好的测试方法呢?希望大家能踊跃提出自己的看法。

    感谢会员cherrycl2008提供此精彩问题!如果你也有问题想提出来和大家一起讨论,请点击此处>>
    说不定下期讨论的问题就是由你提出的哦,请快快参与吧!

    非常感谢各位会员积极参与,截止至6月13日17:30分,从该贴所有评论中选出部分作出精彩评论的会员予以奖励。礼品和积分将在下周内送出。




    获奖名单
    奖项
    获奖名单
    奖励
    答案链接
    一等奖
    huior
    当当购物卡50元
    二等奖
    cynthiagu
    300论坛积分
    fmsbai5
    三等奖
    252090366
    100论坛积分
    dongchanglin
    jasonxu
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-10-27 09:19
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    38#
    发表于 2010-7-21 14:40:24 | 只看该作者
    来学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37#
    发表于 2010-6-11 10:26:18 | 只看该作者
    看了huior童鞋的答案,很有收获
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    36#
    发表于 2009-12-7 18:47:26 | 只看该作者
    这是个很深沉的问题,不是讨论就能解决的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35#
    发表于 2009-10-28 21:52:33 | 只看该作者
    内存泄漏在软件测试中一般都是通过第三方软件进行测试的如purify、boundchecker还有linux上的一些开源的内存检测工具,都能测试到内存泄漏。但是在程序开发时就应该有这方面的意识,比如说可以对内存申请函数进行重新封装来记录内存的申请和销毁情况等等。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34#
    发表于 2009-9-7 18:23:14 | 只看该作者
    原帖由 zhuzx 于 2008-6-11 18:13 发表
    我们公司是用LR中专门可以添加一项,监控CPU的使用率,通过并发用户进行压力测试获知内存泄露的情况。
    如有问题,请同行批评指正!!

    同时我代表全部的测试同行,感谢版主,想到这样的一个“每周一问”,让我们收 ...



    帅哥,是说的客户端软件
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2008-9-18 10:27:48 | 只看该作者

    新报到的,对此问题非常感兴趣

    新报到的,对此问题非常感兴趣,我会向前辈学习,谢谢.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2008-6-18 15:28:16 | 只看该作者
    大家回答得都不错,虽然我自己没有动手做过性能测试,但也从中爱益了.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
    发表于 2008-6-13 14:54:41 | 只看该作者
    我的回答就在
    http://www.51testing.com/?10851/ ... e_itemid_84835.html

    [ 本帖最后由 huior 于 2008-6-13 15:50 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
    发表于 2008-6-13 14:47:20 | 只看该作者
    客户端内存泄漏,公司一个用VC++开发的产品遇到过此类问题。
    1.BoundsChecker;
    2.调试工具包Debugging Tools for Windows (x86)下的 windbg.exe和Gflags.exe;
    3.Pageheap.exe;
    4.Windows自带的性能监控器perfmon;
    5.C++ Test;
    6.Rational PurifyPlus;
    以上这些工具更多是调试用的,需要源代码,对开发人员可能用处更大些
    7.和开发人员沟通,获得最有可能发生内存泄漏的模块或功能点,再执行测试;
    8.分析系统特性,制定计划。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29#
    发表于 2008-6-13 14:46:50 | 只看该作者
    客户端内存泄漏,公司一个用VC++开发的产品遇到过此类问题。
    1.BoundsChecker;
    2.调试工具包Debugging Tools for Windows (x86)下的 windbg.exe和Gflags.exe;
    3.Pageheap.exe;
    4.Windows自带的性能监控器perfmon;
    5.C++ Test;
    6.Rational PurifyPlus;
    以上这些工具更多是调试用的,需要源代码,对开发人员可能用处更大些
    7.和开发人员沟通,获得最有可能发生内存泄漏的模块或功能点,再执行测试;
    8.分析系统特性,制定计划。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    28#
    发表于 2008-6-13 14:44:39 | 只看该作者
    原帖由 liuh3218 于 2008-6-11 12:58 发表
    1、CPU点用率高,内存占用大就能确定是内存泄露吗?

    2、使用Loadrunner来监控服务器端软件,怎样查看内存是否泄露了

    Loadrunner只能监控服务器的各项数据例如磁盘IO、吞吐量、点击数、响应时间、内存、CPU等,并没有哪一项数据可以直接看出是不是内存泄露,这个需要分析,以上是我分析的,并不一定就是准确的,希望大家各抒己见。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
    发表于 2008-6-13 14:39:53 | 只看该作者
    原帖由 博一笑 于 2008-6-11 14:36 发表

    送你个鸡蛋,我今天启动程序,向我得oracle10G所在的服务器发送大量数据,在enterprise mananger console看到性能分析说IO吞吐量低,从资源管理器看到CPU占用率高,内存占用大,你可以基本确定存在内存泄露 ?!
    ...


    我说的不是十分准确,但是阁下也不要断章取义,内存泄露所导致的现象是服务器的吞吐量变小,磁盘的IO变大,CPU和内存占用率高,这点应该没错的吧。特别要注意的是磁盘的IO,因为物理内存被大量占用,所以系统一定会调用磁盘作为虚拟内存,因此磁盘IO会变大。这是我分析的,如有不正确的地方,请指正。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2008-6-12 18:43:31 | 只看该作者

    如果是用C语言编写的话

    在开发的时候需要代码走读或者用purify来检查
    1、用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防治使用指针值为NULL的内存。

    2、动态内存的申请与释放必须配对,以防止内存泄漏。

    3、用free和delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。

    4、不要忘记为数组和动态内存赋值。

    5、避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”的操作。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
    发表于 2008-6-12 11:55:26 | 只看该作者
    要测试客户端是否存在内存泄露,其实原理都一样.
    我们要换位思考,把服务端当成客户端来发送请求,客户端做为服务端来接受请求.我们要多做一个工作就是除了要监控服务器端还要监控客户端的计数器信息.以下是简单的步骤:
    step1:场景设计
    step2:脚本录制和完善
    step3:计数器的选择(特别是客户端计数器选择:在windows自带的性能监控器里一般选择监控某个process 的private byte & virtual byte2个计数器)
    step4:运行场景
    step5:监控测试
    最后关于场景的运行时间,在适当的压力下,我们一般选择运行72小时.
    从之前的测试经验来看,我们发现内存泄露一般都发生在场景运行的前10个小时之内.有的甚至在一个小时之内就发生了内存泄露.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2008-6-12 11:06:09 | 只看该作者
    从测试角度,首先对客户端软件进行分析,判断哪些操作导致内存泄露的可能性大,筛选这些操作,制定可能导致内存泄露的操作计划;然后关注资源管理器的内存使用状况,再按照已制定好的操作计划来执行,再关注内存使用情况做分析。
    个人认为,操作计划可以设计为两种:
    一种是比较平缓的,执行某些操作后留出一定的间隔时间再进行下一次执行,在间隔时间内,关注内存的使用状况,如果内存占有只升不降,重复执行操作计划后,只会使内存使用率越来越高,那么很可能是这些操作使用内存后不释放;
    另一种,不间断的执行某些可能导致内存泄露的操作,如果机器运行越来越慢最后导致软件卡死或死机,那么就可以锁定这些操作再进行具体的分析。软件卡死或死机并不一定就是内存泄露,还要考虑客户端软件对环境的要求等因素,结合第一种操作计划来分析。
    个人观点,请多指教!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2008-6-12 09:45:36 | 只看该作者
    我觉得 内存泄露的 问题在测试VC++开发的软件是比较容易出现的。
    应该说是分配空间内存时出现了问题
    1 ,VC是有专门的测试内存泄露的 工具的  可以具体到代码的那几行。
      2,测试的人员 我觉得看资源管理器 是一个简单而比较实用的方法 ,我们所关注的是怎么样的操作导致分别导致出现内存泄露的概率有多少,这样子才能帮助开发人员更好的解决问题。
      3,LR中的 也有一个WINDOWS资源监控参数,但是我感觉这个只是给一些对服务器的性能的 ,真正查找原因客户端的问题  还没找到合适的方法
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2008-6-11 21:51:59 | 只看该作者

    每周一问是个好节目

    是大家交流的一个好的平台,互相学习,共同进步,谢谢51testing
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2008-6-11 18:22:02 | 只看该作者

    认真学习中

    认真学习中
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2008-6-11 18:13:14 | 只看该作者

    如何发现客户端软件中的内存泄露?

    我们公司是用LR中专门可以添加一项,监控CPU的使用率,通过并发用户进行压力测试获知内存泄露的情况。
    如有问题,请同行批评指正!!

    同时我代表全部的测试同行,感谢版主,想到这样的一个“每周一问”,让我们收益匪浅,希望该栏目越办越好,越办越精彩,谢谢!!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-13 11:42 , Processed in 0.100491 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表