51Testing软件测试论坛

标题: 如何发现客户端软件中的内存泄露?(08-06-06)(获奖名单已公布) [打印本页]

作者: 51testing    时间: 2008-6-6 18:28
标题: 如何发现客户端软件中的内存泄露?(08-06-06)(获奖名单已公布)
这里的客户端软件包括C/S系统的客户端和B/S系统中的客户端控件,当用户使用客户端软件时,如果发现我们的软件会吃内存,那是很丢面子的事,有哪些好的测试方法呢?希望大家能踊跃提出自己的看法。

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

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




获奖名单
奖项
获奖名单
奖励
答案链接
一等奖
huior
当当购物卡50元
31#
二等奖
cynthiagu
300论坛积分
23#
fmsbai5
29#
三等奖
252090366
100论坛积分
5#
dongchanglin
18#
jasonxu
13#

作者: doud    时间: 2008-6-9 23:34
一般会被要求测试服务器端有无内存泄漏,很少碰到客户端的。客户端和服务器端不同在个数,一般一个用户一个客户端,所以这个主要就看长时间用下来有没有泄漏。看客户端都做了什么吧,手工也行,手工有困难就工具模拟这个过程,保持一段时间,看系统资源咯,暂时想到这个。
作者: wishwing    时间: 2008-6-10 09:33
标题: 回复 1# 的帖子
模拟客户操作,在客户端还没运行之前打开任务管理器查看内存情况,在客户端运行之前再次查看内存情况.通过比较来判断.
作者: 独角兽妹妹    时间: 2008-6-10 09:43
原帖由 wishwing 于 2008-6-10 09:33 发表
模拟客户操作,在客户端还没运行之前打开任务管理器查看内存情况,在客户端运行之前再次查看内存情况.通过比较来判断.


能不能说明白点?
作者: 252090366    时间: 2008-6-10 09:58
C/S模式下的软件的话,使用一些专业的内存检测工具,以前做开发的时候在调试的时候用到过,不过那个工具是基于开发环境的,是一个组件.
B/S模式下的软件,可以使用LR,在LR运行的时候,查看操作系统性能计数器中的Private Bytes(Windows)和Resident size(KB)(UNIX/Linux).

如有不当之处,请指教!
作者: carry1986    时间: 2008-6-10 10:55
用工具吧,我上次在网上看到过一种关于内存泄露的工具,名字叫做rationl purify这个工具可以测试.

如有不当之处,请指教!
作者: null2    时间: 2008-6-10 11:01
开发过程中可通过一些工具检查
测试过程中,可在客服端模拟程序运行情况,用性能监视器查看内存情况。
作者: dabeixiong    时间: 2008-6-10 15:06
这个问题不太懂...我也想知道呢...可能黑客或者开发更了解这方面的问题...

[ 本帖最后由 dabeixiong 于 2008-6-10 15:08 编辑 ]
作者: hanhan2006    时间: 2008-6-10 16:14
想多了解这方面的知识
作者: wenzi332000    时间: 2008-6-10 17:41
搬板凳听课,正好现在经常碰到这种问题
作者: doud    时间: 2008-6-10 19:09
标题: 回复 2# 的帖子
嗯,突然想到,还可以白盒测试,如果可以拿到代码的话,c++test的BugDetective

[ 本帖最后由 doud 于 2008-6-10 19:12 编辑 ]
作者: jasonxu    时间: 2008-6-10 20:33
内存泄露必定会导致内存的大量消耗,从而使得系统会调用硬盘空间(虚拟内存)作为内存来使用,磁盘的负荷就大,因此磁盘的IO会比较大,同时CPU的占用率也很高,如果是服务器的话,磁盘的吞吐量会降低很大。因此通过监控磁盘的IO、吞吐量和CPU三个数据便可以发现软件存在的内存泄露,同样的方法也可以使用Loadrunner来监控服务器端软件是否存在内存泄露。
作者: jasonxu    时间: 2008-6-10 20:34
简单地说就是IO值比较高,吞吐量低,CPU占用率高,内存占用大,这有可能是存在内存泄露,我先前太过于肯定,这里更正一下。

[ 本帖最后由 jasonxu 于 2008-6-13 14:41 编辑 ]
作者: liuh3218    时间: 2008-6-11 12:58
1、CPU点用率高,内存占用大就能确定是内存泄露吗?

2、使用Loadrunner来监控服务器端软件,怎样查看内存是否泄露了
作者: 博一笑    时间: 2008-6-11 14:36
原帖由 jasonxu 于 2008-6-10 20:34 发表
简单地说就是IO值比较高,吞吐量低,CPU占用率高,内存占用大,基本可以确定存在内存泄露

送你个鸡蛋,我今天启动程序,向我得oracle10G所在的服务器发送大量数据,在enterprise mananger console看到性能分析说IO吞吐量低,从资源管理器看到CPU占用率高,内存占用大,你可以基本确定存在内存泄露 ?!
CPU占用率高,内存占用大情况很多种,不一定就是内存泄露
作者: sally_test    时间: 2008-6-11 15:42
也想知道答案,等着听课,最好有什么工具推荐
作者: dongchanglin    时间: 2008-6-11 17:11
purify、boundchecker都可以。客户端是C实现吗?
作者: sinakevin    时间: 2008-6-11 17:38
基本上通过手工的来测这个真的太难了,如果你感到这个软件有这方面问题,就去找专业工具去测吧!
作者: zhuzx    时间: 2008-6-11 18:13
标题: 如何发现客户端软件中的内存泄露?
我们公司是用LR中专门可以添加一项,监控CPU的使用率,通过并发用户进行压力测试获知内存泄露的情况。
如有问题,请同行批评指正!!

同时我代表全部的测试同行,感谢版主,想到这样的一个“每周一问”,让我们收益匪浅,希望该栏目越办越好,越办越精彩,谢谢!!
作者: aoyun00    时间: 2008-6-11 18:22
标题: 认真学习中
认真学习中
作者: godn_1981    时间: 2008-6-11 21:51
标题: 每周一问是个好节目
是大家交流的一个好的平台,互相学习,共同进步,谢谢51testing
作者: cynthiagu    时间: 2008-6-12 09:45
我觉得 内存泄露的 问题在测试VC++开发的软件是比较容易出现的。
应该说是分配空间内存时出现了问题
1 ,VC是有专门的测试内存泄露的 工具的  可以具体到代码的那几行。
  2,测试的人员 我觉得看资源管理器 是一个简单而比较实用的方法 ,我们所关注的是怎么样的操作导致分别导致出现内存泄露的概率有多少,这样子才能帮助开发人员更好的解决问题。
  3,LR中的 也有一个WINDOWS资源监控参数,但是我感觉这个只是给一些对服务器的性能的 ,真正查找原因客户端的问题  还没找到合适的方法
作者: sunyh    时间: 2008-6-12 11:06
从测试角度,首先对客户端软件进行分析,判断哪些操作导致内存泄露的可能性大,筛选这些操作,制定可能导致内存泄露的操作计划;然后关注资源管理器的内存使用状况,再按照已制定好的操作计划来执行,再关注内存使用情况做分析。
个人认为,操作计划可以设计为两种:
一种是比较平缓的,执行某些操作后留出一定的间隔时间再进行下一次执行,在间隔时间内,关注内存的使用状况,如果内存占有只升不降,重复执行操作计划后,只会使内存使用率越来越高,那么很可能是这些操作使用内存后不释放;
另一种,不间断的执行某些可能导致内存泄露的操作,如果机器运行越来越慢最后导致软件卡死或死机,那么就可以锁定这些操作再进行具体的分析。软件卡死或死机并不一定就是内存泄露,还要考虑客户端软件对环境的要求等因素,结合第一种操作计划来分析。
个人观点,请多指教!
作者: stevenremember    时间: 2008-6-12 11:55
要测试客户端是否存在内存泄露,其实原理都一样.
我们要换位思考,把服务端当成客户端来发送请求,客户端做为服务端来接受请求.我们要多做一个工作就是除了要监控服务器端还要监控客户端的计数器信息.以下是简单的步骤:
step1:场景设计
step2:脚本录制和完善
step3:计数器的选择(特别是客户端计数器选择:在windows自带的性能监控器里一般选择监控某个process 的private byte & virtual byte2个计数器)
step4:运行场景
step5:监控测试
最后关于场景的运行时间,在适当的压力下,我们一般选择运行72小时.
从之前的测试经验来看,我们发现内存泄露一般都发生在场景运行的前10个小时之内.有的甚至在一个小时之内就发生了内存泄露.
作者: 国米一卡通    时间: 2008-6-12 18:43
标题: 如果是用C语言编写的话
在开发的时候需要代码走读或者用purify来检查
1、用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防治使用指针值为NULL的内存。

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

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

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

5、避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”的操作。
作者: jasonxu    时间: 2008-6-13 14:39
原帖由 博一笑 于 2008-6-11 14:36 发表

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


我说的不是十分准确,但是阁下也不要断章取义,内存泄露所导致的现象是服务器的吞吐量变小,磁盘的IO变大,CPU和内存占用率高,这点应该没错的吧。特别要注意的是磁盘的IO,因为物理内存被大量占用,所以系统一定会调用磁盘作为虚拟内存,因此磁盘IO会变大。这是我分析的,如有不正确的地方,请指正。
作者: jasonxu    时间: 2008-6-13 14:44
原帖由 liuh3218 于 2008-6-11 12:58 发表
1、CPU点用率高,内存占用大就能确定是内存泄露吗?

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

Loadrunner只能监控服务器的各项数据例如磁盘IO、吞吐量、点击数、响应时间、内存、CPU等,并没有哪一项数据可以直接看出是不是内存泄露,这个需要分析,以上是我分析的,并不一定就是准确的,希望大家各抒己见。
作者: fmsbai5    时间: 2008-6-13 14:46
客户端内存泄漏,公司一个用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.分析系统特性,制定计划。
作者: fmsbai5    时间: 2008-6-13 14:47
客户端内存泄漏,公司一个用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.分析系统特性,制定计划。
作者: huior    时间: 2008-6-13 14:54
我的回答就在
http://www.51testing.com/?10851/ ... e_itemid_84835.html

[ 本帖最后由 huior 于 2008-6-13 15:50 编辑 ]
作者: 风动    时间: 2008-6-18 15:28
大家回答得都不错,虽然我自己没有动手做过性能测试,但也从中爱益了.
作者: fengyushi    时间: 2008-9-18 10:27
标题: 新报到的,对此问题非常感兴趣
新报到的,对此问题非常感兴趣,我会向前辈学习,谢谢.
作者: xxcat9901    时间: 2009-9-7 18:23
原帖由 zhuzx 于 2008-6-11 18:13 发表
我们公司是用LR中专门可以添加一项,监控CPU的使用率,通过并发用户进行压力测试获知内存泄露的情况。
如有问题,请同行批评指正!!

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



帅哥,是说的客户端软件
作者: allen_lin    时间: 2009-10-28 21:52
内存泄漏在软件测试中一般都是通过第三方软件进行测试的如purify、boundchecker还有linux上的一些开源的内存检测工具,都能测试到内存泄漏。但是在程序开发时就应该有这方面的意识,比如说可以对内存申请函数进行重新封装来记录内存的申请和销毁情况等等。
作者: jenney    时间: 2009-12-7 18:47
这是个很深沉的问题,不是讨论就能解决的。
作者: 缺水    时间: 2010-6-11 10:26
看了huior童鞋的答案,很有收获
作者: liuhaisheng2008    时间: 2010-7-21 14:40
来学习




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