问题标签 [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.

0 投票
1 回答
3960 浏览

amazon-web-services - 异常后S3客户端连接泄漏

我对 AWS 开发工具包相当陌生

我正在尝试从 S3 获取文件,但该文件可能不存在,显然有一种简单的方法可以使用 Amazon S3 客户端进行检查,因此无论如何我都在尝试获取该对象,并在异常处理内部检查错误消息。等于(“noSuchKey”)。(我知道使用异常来控制这种流程不是最佳做法,但找不到更好的方法)

但是问题就变成了http pooling客户端导致资源泄漏,我找不到关闭它的方法。

这是代码:

在 catch 子句中,对象变为空,所以我不能真正关闭它。我也不能关闭它的任何输入流。日志给了我:

如果我多次调用这个方法并进入catch子句,服务器变得非常慢,这清楚地表明每次初始化一个新的PoolingClientConnectionManager,但我就是找不到关闭它的方法

关于如何关闭它的任何想法?或者我如何避免首先使用异常处理?

0 投票
1 回答
110 浏览

java - 在 Full GC 之后,socket 的实例还在继续增长吗?

我有如下代码片段的套接字应用程序。我已确保套接字在 finally 块中关闭。我猜我昨天或前一天刚刚有一个完整的 GC。然后我在这个 FGC 之前通过 jmap 比较套接字的实例和今天在 FGC 之后但实例没有减少而是继续增加?可能是什么原因或引用 jmap 是错误的?另一件事是,在完全 GC 之后,老年代不会变成 0?

0 投票
1 回答
188 浏览

sockets - Blackfin uClinux 套接字创建失败

我的客户有一个旧版本的 uClinux,内核 2.6.22,在 Blackfin STAMP 板上运行。主应用程序分为 14 个进程,另外还有一个网络服务器在板上运行。

我们看到的错误是,网络服务器一直在愉快地运行,而 VOIP 应用程序似乎用完了文件句柄并且无法创建新的套接字。我已经尝试了我所知道的所有调试技术。我有一个 JTAG 调试器,但内存对于调试符号来说太小了。我不能用 Valgrind 或类似的东西编译。有什么猜测吗?

谢谢,

麦克风

0 投票
0 回答
379 浏览

iphone - AFNetworking 2 POST 内存泄漏

我使用了 AFNetwoking,但简单的 AFHTTPRequestOperationManager POST:parameters:success:failure出现了内存泄漏:

以下是相关截图:

在此处输入图像描述

扩展 - CFURLCredential:

展开 - NSCFString

我正在使用ARC. 我有一个方法,该方法里面是上面的请求。
它在视图控制器出现时自动调用 -- viewDidAppear

每次调用该方法时都会发生内存泄漏。我认为这是我传递的字典(不是上面的示例),所以我删除了字典参数并更改为简单@{"key":@"value"},以确保安全。然后,泄漏再次发生。

之前,我遇到了内存泄漏,因为该方法在后台被调用,所以我尝试放置一个按钮并将其链接到一个IBAction以确保该方法被正确触发:

尽管如此,每次我按下按钮并且请求完成时,总是会发生泄漏。
顺便说一句,我正在 iPhone4 iOS 7 上测试它。

0 投票
3 回答
94 浏览

java - Java中的文件读取,具有相同的文件阅读器

我有两个文件要使用相同的变量读取任务,代码如下:

java中的文件读取不关心关闭打开的流并为第一个文件filename1释放与之关联的任何系统资源?

没有抛出异常。

0 投票
2 回答
2382 浏览

java - IOUtils.close如何安静地隐藏“资源泄漏”警告?

背景

我在IOUtils上使用了一个很好的函数,叫做 "closeQuietly" ,它关闭流,不管里面有什么。

例如:

不知何故,当我在 finally 块中调用它时,它也隐藏了 Eclipse 上的警告,即“资源泄漏:'input' is not closed at this location”。

这意味着在上面的代码中,没有这样的警告。

问题

我不明白它如何将警告隐藏在自身的“外部世界”上。

我试过的

我试图通过复制这个库的代码来检查它(这里的例子),但是当我在新类上使用它时会出现警告。这没有意义...

这是我创建的示例代码,用于显示警告将发生在您自己的类上:

用法:

这是我看到的,包括我正在安装的 Eclipse 版本:

在此处输入图像描述

问题

它是如何做到的?

0 投票
1 回答
207 浏览

python - 如何在不泄漏句柄的情况下进行本地 IPC(跨平台)?

如何使用子进程启动 IPC,而不让它继承所有句柄?为了让它更有趣,这应该在 Windows 和 unix 上工作。

背景:我正在编写一个与 3rparty 共享库(我们称之为 IT)接口的库,该库又包含全局数据(真的应该是对象!)。我想要这个全局数据的多个实例。据我了解,我有两种选择来解决这个问题:

  1. 创建一个与 IT 的静态变体链接的 cython 模块,然后在我需要新实例时复制并导入该模块。类似地,我可以复制 IT,但创建 ctypes 接口需要更多的工作。

  2. 生成一个加载 IT 并建立到它的 IPC 连接的子进程。

使用 (2) 有几个原因:

  • 我不确定,如果(1)在任何方面都是可靠的并且感觉是个坏主意(当应用程序以不受控制的方式退出时,所有额外的模块会发生什么?)。

  • 出于安全考虑,将 IT 打包到一个单独的流程中实际上可能是一个好主意:IT 处理潜在的不安全输入,并且 IT 的代码质量并不太好。所以,我宁愿在运行它时不要打开任何安全资源。

  • 在未来的应用中可能会大量需要这种 IPC

那么我的选择是什么?我已经研究过:

  • multiprocessing.Process起初看起来不错,直到我意识到新进程获取了我所有句柄的副本。不用说这是相当有问题的,因为现在无法通过在父进程中关闭它们来可靠地释放资源 + 前面提到的安全问题。

  • os.closerange在 a中使用multiprocessing.Process手动关闭所有句柄 - 除了我感兴趣的管道。是os.closerange只关闭文件还是它也处理其他类型的资源?如果是这样:给定对象,我如何确定范围Pipe

  • subprocess.Popen(.., close_fds=True, stdin=PIPE, stdout=PIPE)在 unix 上工作正常,但在 win32 上是不可能的。

  • 命名管道在 win32 和 unix 上非常不同。他们有没有他们使用的图书馆?

  • 插座。很有希望,特别是因为它们是可以使用套接字的方便的 RPC 库。另一方面,我担心这可能会导致一大堆安全问题。我已确定为本地来源 ( sock.getpeername()[0] == '127.0.0.1') 的套接字是否可以防止回火?

有没有我忽略的可能性?

总结一下:主要问题是如何在 windows+unix 上建立一个带有子进程的安全 IPC?但是,如果您只知道部分问题的答案,请不要犹豫。

感谢您花时间阅读它!

0 投票
1 回答
683 浏览

c++ - CImageList 是否删除资源?

我在我们的项目中遇到了 GDI 泄漏问题,所以我开始寻找可能的问题。我找到了一个地方,实现者使用 LoadIcon 创建了新的图标实例,并且我知道在关闭嵌入它的元素时我们必须使用 DestroyIcon 删除资源。我不知道的是,如果 CImageList 自动在添加的元素上调用它?到目前为止,我还没有找到确切的答案。

先感谢您。

0 投票
1 回答
252 浏览

sockets - ipython 笔记本和泄漏的文件描述符

我在 ipython 笔记本中运行的代码中存在泄漏文件描述符的问题。我正在下载大量文件urllib2并将它们保存在本地。显然,urllib2有泄漏文件描述符的历史,我怀疑这会导致问题。最后,我得到一个IoError: Too many open files.

作为一种解决方法,我定期使用os.close. 不幸的是,ipython notebook有很多我不想关闭的套接字正在运行。

有没有一种方法可以识别哪些文件描述符/套接字/等 .. 属于ipython

0 投票
1 回答
1691 浏览

java - 如何将进程文件描述符映射到java对象

我有一个泄漏文件描述符的网络应用程序。在生产环境中,Java 进程上的文件描述符数量会随着时间的推移缓慢增长,几个月后文件描述符会用完。文件描述符的当前限制相当高,10240。

查看 java 进程时,文件描述符列表如下所示:

我想做的是选择一个文件描述符,然后以某种方式将它映射到实时 JVM 中的一个对象,以便我可以探索哪些对象被留下,以及谁持有对附加文件描述符的对象的引用。

我想用 Eclipse 连接到实时 JVM,但要做到这一点,我需要重新启动 JVM 以添加调试端口/参数,但随后需要等待几个月才能出现相同的情况。

在不重新启动JVM的情况下如何做到这一点?是否有任何转储工具可以帮助我解决这种特定情况?