我有一个本机win 32应用程序,在作为HTTP服务器的负载测试期间,导致工作集随着时间的推移而增加。没有内存泄漏(通过跟踪PerfMon中的Private Bytes并使用FastMem监视运行时的内存使用情况来确认)。注意:负载是恒定的,大约有50个并发连接,所以没有明显的变化。
使用Process Explorer,我将问题缩小到Token句柄泄漏。我还使用了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)。
对于这些手柄泄漏原因的任何见解都会非常感激,因为我一直试图将它们追捕一段时间。
参考文献: