首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

侦测程序句柄泄露的统计方法(3)

侦测程序句柄泄露的统计方法(3)

基于统计方法的侦测句柄泄露通过运行 lsof 工具我们可以得到一个程序打开的所有句柄数量。我们基于统计方法的侦测句柄泄露的基本思想就是:在该程序连续运行的相当长时间内,对它打开的所有句柄数量进行固定周期采样,再利用作图工具对采样数据绘图,通过图形我们基本可以判断该程序是否存在句柄泄露。在程序运行的同时,我们可以运行大量测试用例,尽可能的覆盖程序的所有功能。
下面脚本对某进程采样 3000 个数据,每 10 秒采样一次,依此数据绘制句柄统计趋势图。
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
set -x
echo "">total_handler

psid=`ps -ef|grep $1|head -1|awk '{print $2}'`
count=0
while [ $count -lt 3000 ]
do
lsof -p $psid|wc -l >> total_handler
sleep 10
count=`expr $count + 1`
done




根据我们项目的测试经验,通常统计出来的句柄图形如下列三种:
平稳图 4. 平稳图在程序运行当中,句柄被不断地打开关闭,因此统计图形呈现平稳的锯齿形。在程序运行后期,很多临时打开的句柄被逐渐关闭,总的句柄数量没有随着时间的推移而增加,因此该程序不存在句柄泄露。
峰值稳定图 5. 峰值稳定图在该程序运行初期,程序打开的句柄数量会随着时间的推移而逐步增加。但是当运行一段时间后,句柄数量会达到一个相对平稳的状态,大概 3500 左右。这个时候表明程序打开了很多临时句柄,但是句柄数量相对稳定,也不存在句柄泄露问题。
递增图 6. 递增图程序在运行当中,某一操作引起了程序打开句柄数量逐步增加,而且没有出现相对平稳的迹象,说明该程序可能存在句柄泄露,需要进一步分析是哪一部分的句柄存在泄漏,以及什么操作会引起程序句柄的泄露。
通过对程序句柄数量进行采样统计,并且绘制出相应的统计图形,能够以比较直观的方式判断在程序中是否存在句柄泄露。该方法基于程序要运行大量的测试用例,增加测试用例的覆盖率,尽可能多的用测试用例触发程序打开和关闭句柄的操作,这样才能发现潜在的句柄泄露 bug。对于如何能够快速的发现句柄泄露代码,我们将做进一步研究。
返回列表