问题标签 [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.
java - 当对象打开()-ed但从不关闭()-d时,java是否会泄漏内存?
只是为了了解在 Java 中可能发生内存泄漏的各种方式。可以肯定地说,最通用的方法是创建对对象的引用并且从不释放吗?
前任 :
并且没有调用:
linux - 如果 linux 程序以 coredump 退出,未关闭的文件可能导致资源泄漏
众所周知,操作系统会在程序退出后清理所有分配的内存。但是在 coredump 之后打开或创建的文件怎么样?
java - Apache HttpAsyncClient 中的文件描述符泄漏
在 Linux 上运行时(仅在 Linux 上尝试过),以下代码似乎泄漏了 1 个 anon_inode 和 2 个管道文件描述符,根据lsof
:
但是,如果client.execute()
调用一次或多次,则不会发生泄漏。
完整示例代码:
我懂了
如果我取消注释该execute
行,泄漏就会消失。
(1) 是预期/预期的行为,还是这是一个错误?
(2) 为什么/如何发生这种情况?
apache-camel - Camel:将文件从:xxx重命名为:xxx失败,由于无法从文件中删除:复制成功后的xxx
系统后台:Windows/ServiceMix/Camel/Smooks
我有骆驼路线
它应该获取一个文件并将其流式传输到 Smooks 自定义 EDI 解析器。这一直有效,直到 Camel 将文件复制到moveNamePrefix
目录中,然后在引发异常时尝试删除原始文件。由于该文件永远不会被清理,这会无限期地重复。
所以是的,文件仍然打开,阻止删除。但这就是它变得有点有趣的地方。如果您列出打开的文件,您会看到它实际上打开了多次,并且每 2 秒会再获得一个,这就是轮询延迟。
然而,即使此时它已经完成了约 7,000 个周期,也只有不到 100 个,所以是的,所有文件在 GC(垃圾收集)期间关闭,然后再次开始累积。是的,这表明流在引用它的对象被 GC 清理之前不会关闭。但是,我已经跟踪了代码并且流已关闭org.milyn.delivery.sax.SmooksSAXFilter.doFilter
所以,我在这里有点茫然。这是否意味着 Camel 试图在 Smooks 完成之前在另一个线程上提交事务?
java - 为什么编译器会警告资源泄漏?
我不明白为什么编译器会Resource leak: 'conn' is not closed at this location
在以下代码中警告我资源泄漏():
请注意,如果我这样写
警告消失了。
java - 多个请求后 Apache HttpComponents 超时
我正在使用带有 PoolingHttpClientConnectionManager 的 HttpClient 4.3 和两个线程,每个线程都连接到 REST API。两者都在永久发送请求。它在几分钟内运行良好,但随后请求开始超时。浏览时,即使 Chrome 也无法建立与网站的连接。这是我发送请求的代码:
HttpClient 是一个独特的对象,在两个线程之间共享。我已经尝试将 DefaultMaxPerRoute 和 MaxTotal 限制为 1 和 2,我什至使用了非常大的值,但没有结果。我什至实现了一个额外的线程,它反复调用 closeExpiredConnections() 和 closeIdleConnections() ,也没有任何改进。你知道我能做什么吗?我认为某处资源正在泄漏,但我不知道在哪里......谢谢
delphi - 什么会导致安全上下文令牌句柄泄漏?
我有一个本机 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)。
任何对这些句柄泄漏原因的深入了解都将非常感激,因为我已经尝试追捕它们很长一段时间了。
参考:
java - 我的 java 程序中的资源泄漏
我正在尝试在 java 中编写一个方法,我从文件中获取一些信息并查看该文件是否包含用户查找的信息。但是,对于我提供的代码,eclipse 表明我在“return true;”行中存在资源泄漏;并且“br = new BufferedReader(fr);” 永远不会关闭,尽管我在程序末尾使用了 close() 方法。显然我错过了一些东西。有人可以帮我弄清楚发生了什么吗?非常感谢提前!
javascript - DOM 节点通过淘汰赛 foreach 泄漏
我已经看到 IE8 和 IE9 中的内存使用量随着我们的 Web 应用程序之一逐渐增加。经过一番调查,它似乎与foreach
Knockout 中的绑定有关。我已经编译了一个简化的 JSFiddle,在这里突出了这个问题:http: //jsfiddle.net/jfbbprkh/1/
在真实的应用程序中,模型是从后端更新的,每次都会覆盖状态。如果您翻转复选框
在 Chrome 中运行此程序,您可以看到 DOM 使用量在垃圾收集器启动之前逐渐上升,在 IE8 和 IE9 中不会发生这种情况,DOM 使用量一直在上升和上升。我还通过 sIEve 对此进行了一些细微的修改,这也突出了这个问题。
在小提琴中,您可以foreach
使用复选框禁用绑定,并且在 Chrome 中使用分析工具时,您会看到 DOM 使用保持稳定,因此我怀疑这与foreach
绑定以及它添加和删除 DOM 元素的方式有关. 我猜这些元素仍然附加了一些事件处理程序,这就是它们没有被正确清理的原因。
我也尝试过用foreach
模板替换“嵌套”(不知道如何在小提琴中做到这一点),但它仍然表现出同样的问题。
所以问题是 - 我做错了什么,或者这是一个真正的 Knockout 错误?
笔记:
- 时间戳用于显示正在发生的事情(我们在真实应用中确实有类似的)
- 我们必须至少支持 IE8,这反过来意味着 JQuery 1.9x
macos - Mac OS X 上奇怪的与防火墙相关的套接字泄漏
我在 Mac OS XI 中遇到了一个奇怪的套接字泄漏问题,无法解释。我有一个开源守护程序 (olad),它在 9010 (tcp)、9090 (tcp) 和 6454 (udp) 以及其他端口上进行侦听。当守护进程退出时,netstat 显示端口 6454 仍处于打开状态并正在侦听:
但是, lsof 不显示套接字:
一旦系统处于这种状态,通过向端口发送数据包,我可以看到队列计数增加:
只有在 Preferences -> Security & Privacy 中启用了应用程序防火墙并且这是第一次运行二进制文件时,才会发生这种情况。也就是说,如果我禁用防火墙,则不会发生泄漏。或者,如果启用了防火墙,在第一次运行后弹出对话框并单击接受后,问题不再出现。
一旦套接字泄漏,禁用防火墙将无法释放它。
我已经确认在程序退出之前我在所有套接字上调用 close() 并且没有调用 fork() 或新线程。
我一直在尝试缩小错误案例的范围,但它似乎是 pipe()、socket()、bind()、listen()、ioctl()、fnctl() 和 select() 之间相当复杂的交互。更改调用顺序并删除端口 9010 和 9090 上的侦听会导致问题消失。
有没有人有关于如何继续调试的建议,或者关于 Mac 应用程序防火墙如何在内部工作的指南?