问题标签 [handle-leak]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1128 浏览

c# - WebBrowser 控件在处理 Click 事件时专门泄漏内存

我在 Windows 7、.NET 4.5、IE10 中。我有一个带有WebBrowser控件的简单 Windows 窗体应用程序。每次页面导航时,我都想添加一个点击处理程序。我注意到当我这样做时内存正在泄漏。实际上,我正在分离事件处理程序,因此对内存泄漏的原因感到困惑。

我注意到我可以附加到HtmlDocument.Click事件并且看不到与HtmlElement.Click. 这在下面的程序中得到了演示,该程序使用计时器定期导航。

同样有趣的是,URL 似乎确实很重要......例如,我看到http://www.google.com的问题,但没有看到http://thin.npr.org(或 about:blank)的问题。这会让我相信这是一个javascript问题的核心,但是我目前正在使用的“修复”(见下文)与javascript没有任何关系......

那么是什么导致了问题以及如何解决这些问题,以便我的程序不会泄漏内存/句柄?

我目前的“修复”是拜访Marshal.ReleaseComObjectHtmlElement.DomElement物业。这是正确的做法吗?不应该像显然那样HtmlElement清理自己吗?HtmlDocument除了 之外,我还应该期待其他课程的问题HtmlElement吗?

我很想在Marshal.ReleaseComObject我看到 com 对象的任何地方慷慨地撒上(而不是假设包含类会正确地这样做)。这样做安全吗?

我的完整程序如下:

对于任何好奇的人,我在我的程序中使用对象进行了测试,WeakReferencebody验证它正在被垃圾收集。

在运行“固定”版本一段时间(可能是一个小时)后,它稳定在约 40 兆的私有字节和 640 个句柄。“泄漏”版本达到数百兆和数千个句柄,并且似乎没有放慢速度。在生产中,当事情停止运行(图像无法加载)时,用户有一个使用超过 900 兆的进程。关闭应用程序需要几秒钟才能将所有内容都删除。

0 投票
1 回答
731 浏览

python - pyzmq中的套接字句柄泄漏?

嗨 StackOverflow 的好人。

我正在使用 pyzmq 并且我有一些长时间运行的进程,这导致发现套接字句柄处于打开状态。我已将有问题的代码缩小到以下内容:

pyzmq 版本为 pyzmq-13.1.0

要么 pyzmq 中存在错误,要么我做错了什么。我希望你能帮帮我!!

谢谢!

0 投票
2 回答
76 浏览

bash - bash中子进程之间的变量泄漏

大家好,stackoverflow 的每个人我都遇到了一个 bash 脚本作为孩子运行的问题,它与我的父脚本存在变量冲突。我有一个子进程,它启动并从父进程中提取变量。我所要做的是,在每个每秒同时运行的子进程中,子进程之间的变量交叉。例如 UnitIP UnitPort 和 Unitname 都是从和数组中定义的,但是当下一个孩子打开时,另一个孩子也收到对 unitip unitPort 所做的更改等......有人有解决这个问题的方法吗?所以假设 UnitIP=${IP[0]} 子用 UnitIP=${IP[0]} 打开,循环回到 UnitIP=${IP[1]} 第二个子用 UnitIP=${IP[1 打开]} 和第一个孩子也更改为 UnitIP=${IP[1]} 感谢您的时间和帮助。

0 投票
2 回答
1113 浏览

c# - C# PerformanceCounter 类导致句柄泄漏

我有一个使用 .NET 4.0 开发的应用程序。此应用程序跟踪一些自定义性能计数器并显示给用户。最近我发现应用程序中存在句柄泄漏。两种类型的句柄是 Mutant 和 PcwObject。

我关注了这个页面(http://blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx)并得到了以下堆栈跟踪:

我还打开了 Process Explorer 来监控句柄状态。根据我的观察,上述两个句柄(3760 和 3998)存活了半个多小时,还没有被破坏。句柄数在 2 小时内增加了约 1000 个。其中一半是 Mutant,另一半是 PcwObject。

我怀疑它与 PerformanceCounter 有关,因为我知道注册表中的 PerformanceCounter 类 grep 数据,并且我在堆栈跟踪中找到了 PerflibciQuery 和 RegQueryValue。

我已经通过互联网搜索,但似乎没有运气。有人对此有任何想法吗?谢谢

附加信息

我一一测试了那些性能计数器,发现这些句柄在获取这个计数器时被泄露了:PerformanceCounter("HTTP Service Request Queues", "CurrentQueueSize", "ABC")

我的代码是这样的:

counter是一个成员变量,我很确定当这个类被销毁时它会被释放。所以我不知道为什么它会泄漏手柄。

0 投票
2 回答
584 浏览

memory-leaks - 如何在“!htrace -diff”结果中获取所有堆栈跟踪帧?

似乎“!htrace -diff”只能显示16帧。如何增加堆栈跟踪中的帧数?以下是!htrace -diff 检测到的泄漏句柄之一。如果没有完整的堆栈跟踪,我无法从中读取任何内容。

0 投票
5 回答
10137 浏览

c++ - CreateFileMapping,MapViewOfFile,处理泄漏 C++

背景:我正在尝试创建一个可由多个进程访问的内存映射文件。在下面的代码中,我只输入了与我目前必须使事情变得更简单的问题有关的代码。根据 msdn,我应该能够创建文件映射、映射文件视图并关闭从 CreateFileMapping 收到的句柄,并且 MapViewOfFile 将使我的 FileMap 保持活动状态。FileMap 应该仍然可以访问,直到我 UnmapViewOfFile。

MSDN: CreateFileMapping 函数

文件映射对象的映射视图维护对该对象的内部引用,并且文件映射对象在对它的所有引用都被释放之前不会关闭。因此,要完全关闭文件映射对象,应用程序必须通过调用 UnmapViewOfFile 取消映射文件映射对象的所有映射视图,并通过调用 CloseHandle 关闭文件映射对象句柄。这些函数可以按任何顺序调用。

问题:成功映射文件视图然后关闭 CreateFileMapping 接收到的句柄后,FileMap 不再存在(它应该仍然存在)并且我的 MemMapFileReader 能够创建一个错误为 0 的新映射。(当它应该接收错误 183 '已经存在')

不好的解决方案:不关闭句柄允许 MemMapFileReader 程序访问它,但会导致 MemMapFileCreator 中的句柄泄漏,因为在进程关闭之前,句柄永远不会关闭。

问题:我错过了什么或做错了什么?

MemMapFileCreator

MemMapFileReader

0 投票
0 回答
109 浏览

windows - 同步代码会导致 svhost rpcss 上的句柄泄漏吗

我在我的win7 x64系统上运行一种代理软件,让我困惑的一件事是svhost -k rpcss进程似乎面临严重的句柄泄漏,句柄泄漏继续增加,甚至在几天内达到100,000,如果我不重新启动系统,电脑将变得太慢而无法使用。

现在我怀疑这个问题可能是由代理软件引起的,我正在尝试使用windbg对其进行调试,但仍然不知道如何确定是否是导致此问题的代理软件。

有人告诉我,错误的同步代码可能会导致 svhost rpcss 进程的处理泄漏,这是真的吗?有人可以给我一段可能导致 svhost rpcss 泄漏的代码吗?如果是的话,我可以先用windbg研究这段代码,然后我可以仔细检查那个代理软件。

编辑 1 @PanagiotisKanavos 我要求提供一段可能导致泄漏的代码,所以这个问题应该在这个地方而不是在服务器故障上更好

0 投票
0 回答
563 浏览

.net - WCF ReliableSession:在框架 4.5 中处理泄漏?

在某些服务器上安装 4.5 运行时后,我们遇到了许多与 winsock 相关的错误。当在 .Net 4.5 运行时(在 4.0 上不可重现)上使用带有 ReliableSessions 的 WCF 时,我将问题追溯到 \Device\Afd 的句柄泄漏。

我编写了一个测试程序来隔离/证明问题。

假设一个非常虚拟的 WCF 服务和客户端(可以从 VS 生成):

它是托管和消费的。

测试程序的输出是:

评论:

  • 我知道我应该做更好的错误处理,因为 Close() 可以抛出,但在这种情况下它不会,所以我更喜欢在这里粘贴更少的代码。
  • 在这里,我记录了所有句柄(不仅是 \Device\Afd)的句柄计数。这使得快速测试变得更容易,但我使用 sysinternals 的 handle.exe 进行了许多检查以验证句柄的名称/类型
  • 句柄是客户端泄露的,而不是服务泄露的(至少在关闭服务主机后它们被正确清理)。

变化:

  • 将 Proxy.Close() 更改为 Abort() 时,其中的所有句柄都会正确释放(但是服务很难关闭 - 正如预期的那样)
  • 创建通道通过IClientChannel proxy = ChannelFactory<IMyService>.CreateChannel(binding, address) as IClientChannel给出相同的结果
  • 通过 channelfactory 实例创建通道时,句柄被正确释放:IClientChannel proxy = new ChannelFactory<IMyService>(binding, address).CreateChannel() as IClientChannel
  • 将 ClientBase<>.CacheSetting 设置为 AlwaysOn,可以解决问题,但并非总是可行。

有谁知道为什么这个程序会泄漏句柄?

0 投票
1 回答
217 浏览

c# - 任务内部抛出异常时处理泄漏

我试图了解应用程序中发生的一个非常奇怪的句柄泄漏。我设法在以下代码中隔离了问题:

照原样,这个测试应用程序非常非常快地提升到 23721 个句柄(5 秒足以达到这个值)

任务管理器屏幕截图

但是,删除“throw new Exception”行后,应用程序在运行几分钟时保持稳定,大约有 450 个句柄。

知道这里有什么问题吗?

谢谢!

编辑#1

由于问题的警告无法重现,我注意到它仅在 Visual Studio 中以调试模式运行时才会发生(2013 和 2015 Professional 中的结果相同)。

编辑#2

今天,我在另一台使用完全相同版本的 Visual Studio(2013 Pro 12.0.40629.00 Update5)的计算机上测试了完全相同的项目,但这个项目在 Windows 8.1 中运行(我的计算机运行的是 Windows 10),而我是无法在这里重现问题。

编辑#3

我刚刚在另一台运行 Windows 10 和 Visual Studio 2015 Pro 的计算机上进行了测试,再次没有出现问题!现在我非常困惑,因为我在 Visual Studio 2015 Pro 中运行时在我的计算机上遇到了同样的问题,而且我没有安装特殊的扩展。我想我会利用周末来彻底重装系统。

0 投票
1 回答
47 浏览

django - 当我使用 django 函数 object.filter 时,python 的句柄增加了,我该如何解决这个问题?

我使用WIN7 32 System, Django 1.8.13, Python 2.7.

当我使用xxx.object.all()orxxx.object.filter('xx')之类的函数时,python 的句柄数会增加。

看来它用Class QuerySet了,那么句柄数会增加。即使,我只是使用admin-site来管理数据库。手柄泄漏也会发生。

我怎样才能释放它或解决它?