Windows Server 2003 上句柄“泄漏”

现象是在soak测试场景中,每天以线性关系增长700个句柄。

 
解决过程如下:
  1. 重现问题。只要问题能稳定重现,那就很容易解决。这次很幸运,很轻松弄好了重现环境。
  2. 使用windbg attach到被调试进程。
  3. 启用操作系统对于句柄栈追踪功能:!htrace -enable。
  4. 等问题重现以后,使用!htrace -diff来看这两个命令之间所有打开了但还没有被关闭的句柄。
结果令我吃了一惊,从堆栈显示,“泄漏”竟然指向EnterCriticalSection(),这是系统提供的函数,应该不会出错,所以可能是符号表没有正确加载,从而导致堆栈不正确。于是我重新加载应用程序和系统的符号表,再次测试,结果还是一样。于是我突然意识到所谓的“泄漏”可能是虚惊一场,句柄增长的真正原因是CS内部使用的event同步对象延迟创建机制导致的。即每个CS只有在真正有多线程竞争它的时候才初始化内部的内核对象,完成同步工作。
 
于是经过和测试人员沟通,发现问题场景确实是不断会竞争CS,从而导致event对象不断创建,而且竞争的数量分布也很均匀,符合句柄现行增长的现象。所以问题分析结束。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值