问题标签 [resource-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.
resource-leak - 通过“系统”进程诊断 100% CPU 使用率的原因
我有一个 Windows 服务器应用程序,使用 Win32 API 在 C++ 中实现,它执行大量串行和 TCP/IP 通信。随着它的运行,CPU 使用率逐渐增加,直到达到 100%。任务管理器表明大部分 (>75%) 的 CPU 使用率是由“系统”进程使用的。如果我杀死我的服务器进程,那么 CPU 使用率就会恢复正常。
是否有任何“简单”的方法可以准确诊断问题所在?
我怀疑 I/O 连接正在打开并且从未关闭,因此操作系统花费越来越多的时间来服务这些请求,但我想在尝试解决问题之前验证情况是否如此。
更新:玩弄之后xperf
,我发现 System 进程有一半以上的时间花在ntoskrnl.exe!KxWaitForSpinLockAndAcquire
. 我对此一无所知,但该函数的名称向我表明可能存在死锁/争用问题。
System 经常使用的其他功能包括NETIO.SYS!FilterMatchEnum
、NETIO.SYS!MatchConditionOverlap
、NETIO.SYS!IsFilterVisible
和MpNWMon.sys!NetFlowUpendByCompletionHandle
。
c++ - 如何追踪 Windows USER 对象泄漏?
我有一个程序正在泄漏可以在任务管理器中看到的 USER 对象。有没有办法确定泄漏的是哪种类型的资源?我已经使用 GDI View 之类的程序来处理 GDI 泄漏,它按对象类型将其分解。对于 USER 对象,是否有类似的东西?
android - 使用 KeyGuardManager 时的资源泄漏
我正在尝试使用 KeyGuardManager 和 KeyguardLock 来解锁手机,但它只在前几次有效,当我杀死我的应用程序时,我得到:
WindowManagerService.mKeyguardTokenWatcher: cleaning up leaked reference
这个问题可能与KeyGuardManager的问题有关,但我在Android KeyguardManager API 参考中找不到提到的exitKeyguardSafely()。而不是exitKeyguardSafely()我尝试使用exitKeyguardSecurely()无济于事。
请帮忙!
visual-studio-2008 - 这是内存泄漏吗?内核资源泄漏?(C++,并行工作室)
背景:我正在编写一些代码来从文件中读取数据。数据示例由换行符分隔。此外,数据还有一个元级别,分号用作分隔符以指示已到达序列的末尾。该文件包含许多序列。我想打开文件,读入一行数据并将其存储为向量,对数据做一些事情,然后读入下一行......直到文件结束。
以下编译正常,当在我的 linux 机器上使用 valgrind 运行时,没有发现内存泄漏。但是,当我在实验室的 Windows 机器上使用 Parallel Studio 中的 c++ 检查器工具时,它会在我的程序中报告与内存相关的错误,这两个错误都在这个文件中。
报告了内存泄漏,似乎源于以下行:
并且还报告了以下内核资源泄漏:
谁能帮我理解为什么我会收到这些错误以及我应该怎么做才能纠正它们?我不明白为什么这是内存泄漏,更不确定内核资源错误。另外,如果我在这里做任何非常愚蠢的事情,请随时告诉我!
python - C 库中的文件句柄泄漏(可能)会给 NFS 带来麻烦(+python,但这是偶然的)
这是一个很酷的问题。
我有一个调用 python 模块 (foo.py) 的 python 脚本 (main),该模块又调用另一个 python 模块 (barwrapper.py) 使用 LoadLibrary 动态打开和访问 libbar.so 库。
libbar 和整个链的其余部分打开并创建文件来执行它们的任务。当我们在主 python 脚本中发出一个 rmtree 以摆脱导入模块创建的临时目录时,就会出现问题。rmtree 在脚本结束时调用,就在退出之前。调用失败,因为该目录包含.nfs-whatever
隐藏文件,我猜这是已删除的文件。这些文件显然在代码中保持打开状态,迫使 nfs 将它们移动到这些.nfs-whatever
文件中,直到文件描述符被释放。这种情况在其他文件系统中不会出现,因为与持有的描述符相关联的文件被有效地删除,但内核仍然可以访问,直到描述符关闭。
我们强烈怀疑 .so 库正在泄漏文件描述符,而这些未关闭的文件在清理时破坏了 rmtree 聚会。我考虑过在 barwrapper 中卸载 .so 文件,但显然没有办法做到这一点,而且我不确定 dynloader 是否真的会从进程空间中删除 lib 并关闭描述符,或者它是否只会将其标记为已卸载就是这样,等待被其他东西替换,但描述符泄露了。
我真的想不出解决这个问题的其他解决方法(除了修复泄漏,这是我们不想做的事情,因为它是第 3 方库)。显然,它只发生在 nfs 上。你知道我们可以尝试修复它吗?
windows - 调试异常内存泄漏的调试技术
我有一个泄漏大量内存的 Windows 应用程序(旧版)。它不会泄漏私有字节,我只在进程资源管理器中看到它不断加载相同(局部)Windows dll-s 的许多实例。
是否有一种工具可以用来“捕获” dll-s 映射到进程空间的时刻,以便我可以将其(使用应用程序符号)跟踪到源代码?
c# - 如何在 c# 中使用打开/保存文件对话框时防止资源泄漏
我们在桌面应用程序(C#)中使用保存/opn 文件对话框。当我们第一次打开对话框时,句柄增加了 100。关闭对话框后,句柄并没有减少。从下一次开始,句柄增加了 10 左右,减少了 2 到 4。
我们尝试通过调用 dispose 并将其设为 null 来减少句柄。并尝试使用块。但他们都没有解决这个问题。
你能告诉我任何解决这个问题的方法吗?或者我们可以使用任何自定义控件吗?
请对此提出建议
提前致谢
代码:代码是
java - 确保您正确关闭文件的java单元测试的好模式是什么?
我的代码库中有一个问题,我们没有正确关闭文件句柄,或者可能是流。我们最终在非常重的负载下得到了一个 TooManyOpenFiles 异常。根据 lsof 的输出,我们很确定我们知道泄漏在哪里(在我们的日志系统中),但我的问题是:我如何编写一个单元测试来检查,当它完成时,资源是否已正确关闭?有没有办法查询 JRE 以了解当前打开了多少文件?我可以以某种方式拦截文件操作以便监控它们吗?
我怀疑我将不得不检测我的代码以管理所有文件 I/O、计数引用并确保它们以这种方式关闭,但如果有人知道类似于我上面提到的那些想法的自上而下的解决方案,那将是一个巨大的帮助!
windows - 如何跟踪处理泄漏?
在我的一个应用程序中,我观察到越来越多的句柄。在不使用应用程序的情况下,该数字大约每秒递增一次,因此在后台处理代码的某些部分中肯定存在句柄泄漏。
如何追踪此类泄漏?有什么工具可以帮助解决这个问题吗?跟踪句柄泄漏时要寻找哪些模式?导致句柄泄漏的最常见错误是什么?
一堆问题,但我希望它们足够相关,可以将它们放在一个问题中。感谢您提前输入!