2

我有一个本机 win 32 应用程序,在作为 HTTP 服务器进行负载测试期间,它会导致工作集随着时间的推移而增加。没有内存泄漏(通过在 PerfMon 中跟踪 Private Bytes 并在运行时使用 FastMem 监控内存使用情况来确认)。注意:负载是恒定的,大约有 50 个并发连接,所以没有明显的变化。

使用 Process Explorer,我将问题缩小到令牌句柄泄漏。我还使用 madKernel 来报告句柄使用计数,这也证实了令牌句柄不断增加。

准确地说,我在 Process Explorer 中看到以下内容:

在此处输入图像描述

Process Explorer 中显示的所有令牌句柄都具有相同的名称:'Doug-M46\Doug:ff739'):

在此处输入图像描述

我可以在代码中看到没有安全性(或其他需要安全凭证的相关 API 调用),但是肯定有一些被调用的东西导致了这个问题,我只是不知道还要寻找什么。

我已经使用 AQTime 尝试跟踪泄漏源,但没有任何运气。在这一点上,我正在考虑挂钩所有可能导致此泄漏的 API 调用,因此我可以追踪它,但我更愿意避免这种极端措施。

我的应用程序在一个单独的线程中使用 ICS HTTP Server 组件来处理我的应用程序的 HTTP 请求(32 位应用程序、Delphi XE-2、ICS V8 Gold、Windows 7 Professional Build 7601:SP1)。

任何对这些句柄泄漏原因的深入了解都将非常感激,因为我已经尝试追捕它们很长一段时间了。

参考:

什么会导致部分句柄泄漏?

4

0 回答 0