问题标签 [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.
amazon-web-services - 异常后S3客户端连接泄漏
我对 AWS 开发工具包相当陌生
我正在尝试从 S3 获取文件,但该文件可能不存在,显然有一种简单的方法可以使用 Amazon S3 客户端进行检查,因此无论如何我都在尝试获取该对象,并在异常处理内部检查错误消息。等于(“noSuchKey”)。(我知道使用异常来控制这种流程不是最佳做法,但找不到更好的方法)
但是问题就变成了http pooling客户端导致资源泄漏,我找不到关闭它的方法。
这是代码:
在 catch 子句中,对象变为空,所以我不能真正关闭它。我也不能关闭它的任何输入流。日志给了我:
如果我多次调用这个方法并进入catch子句,服务器变得非常慢,这清楚地表明每次初始化一个新的PoolingClientConnectionManager,但我就是找不到关闭它的方法
关于如何关闭它的任何想法?或者我如何避免首先使用异常处理?
java - 在 Full GC 之后,socket 的实例还在继续增长吗?
我有如下代码片段的套接字应用程序。我已确保套接字在 finally 块中关闭。我猜我昨天或前一天刚刚有一个完整的 GC。然后我在这个 FGC 之前通过 jmap 比较套接字的实例和今天在 FGC 之后但实例没有减少而是继续增加?可能是什么原因或引用 jmap 是错误的?另一件事是,在完全 GC 之后,老年代不会变成 0?
sockets - Blackfin uClinux 套接字创建失败
我的客户有一个旧版本的 uClinux,内核 2.6.22,在 Blackfin STAMP 板上运行。主应用程序分为 14 个进程,另外还有一个网络服务器在板上运行。
我们看到的错误是,网络服务器一直在愉快地运行,而 VOIP 应用程序似乎用完了文件句柄并且无法创建新的套接字。我已经尝试了我所知道的所有调试技术。我有一个 JTAG 调试器,但内存对于调试符号来说太小了。我不能用 Valgrind 或类似的东西编译。有什么猜测吗?
谢谢,
麦克风
iphone - AFNetworking 2 POST 内存泄漏
我使用了 AFNetwoking,但简单的 AFHTTPRequestOperationManager POST:parameters:success:failure
出现了内存泄漏:
以下是相关截图:
扩展 - CFURLCredential:
展开 - NSCFString
我正在使用ARC
. 我有一个方法,该方法里面是上面的请求。
它在视图控制器出现时自动调用 -- viewDidAppear
。
每次调用该方法时都会发生内存泄漏。我认为这是我传递的字典(不是上面的示例),所以我删除了字典参数并更改为简单@{"key":@"value"}
,以确保安全。然后,泄漏再次发生。
之前,我遇到了内存泄漏,因为该方法在后台被调用,所以我尝试放置一个按钮并将其链接到一个IBAction
以确保该方法被正确触发:
尽管如此,每次我按下按钮并且请求完成时,总是会发生泄漏。
顺便说一句,我正在 iPhone4 iOS 7 上测试它。
java - Java中的文件读取,具有相同的文件阅读器
我有两个文件要使用相同的变量读取任务,代码如下:
java中的文件读取不关心关闭打开的流并为第一个文件filename1释放与之关联的任何系统资源?
没有抛出异常。
java - IOUtils.close如何安静地隐藏“资源泄漏”警告?
背景
我在IOUtils上使用了一个很好的函数,叫做 "closeQuietly" ,它关闭流,不管里面有什么。
例如:
不知何故,当我在 finally 块中调用它时,它也隐藏了 Eclipse 上的警告,即“资源泄漏:'input' is not closed at this location”。
这意味着在上面的代码中,没有这样的警告。
问题
我不明白它如何将警告隐藏在自身的“外部世界”上。
我试过的
我试图通过复制这个库的代码来检查它(这里的例子),但是当我在新类上使用它时会出现警告。这没有意义...
这是我创建的示例代码,用于显示警告将发生在您自己的类上:
用法:
这是我看到的,包括我正在安装的 Eclipse 版本:
问题
它是如何做到的?
python - 如何在不泄漏句柄的情况下进行本地 IPC(跨平台)?
如何使用子进程启动 IPC,而不让它继承所有句柄?为了让它更有趣,这应该在 Windows 和 unix 上工作。
背景:我正在编写一个与 3rparty 共享库(我们称之为 IT)接口的库,该库又包含全局数据(真的应该是对象!)。我想要这个全局数据的多个实例。据我了解,我有两种选择来解决这个问题:
创建一个与 IT 的静态变体链接的 cython 模块,然后在我需要新实例时复制并导入该模块。类似地,我可以复制 IT,但创建 ctypes 接口需要更多的工作。
生成一个加载 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?但是,如果您只知道部分问题的答案,请不要犹豫。
感谢您花时间阅读它!
c++ - CImageList 是否删除资源?
我在我们的项目中遇到了 GDI 泄漏问题,所以我开始寻找可能的问题。我找到了一个地方,实现者使用 LoadIcon 创建了新的图标实例,并且我知道在关闭嵌入它的元素时我们必须使用 DestroyIcon 删除资源。我不知道的是,如果 CImageList 自动在添加的元素上调用它?到目前为止,我还没有找到确切的答案。
先感谢您。
sockets - ipython 笔记本和泄漏的文件描述符
我在 ipython 笔记本中运行的代码中存在泄漏文件描述符的问题。我正在下载大量文件urllib2
并将它们保存在本地。显然,urllib2
有泄漏文件描述符的历史,我怀疑这会导致问题。最后,我得到一个IoError: Too many open files
.
作为一种解决方法,我定期使用os.close
. 不幸的是,ipython notebook
有很多我不想关闭的套接字正在运行。
有没有一种方法可以识别哪些文件描述符/套接字/等 .. 属于ipython
?
java - 如何将进程文件描述符映射到java对象
我有一个泄漏文件描述符的网络应用程序。在生产环境中,Java 进程上的文件描述符数量会随着时间的推移缓慢增长,几个月后文件描述符会用完。文件描述符的当前限制相当高,10240。
查看 java 进程时,文件描述符列表如下所示:
我想做的是选择一个文件描述符,然后以某种方式将它映射到实时 JVM 中的一个对象,以便我可以探索哪些对象被留下,以及谁持有对附加文件描述符的对象的引用。
我想用 Eclipse 连接到实时 JVM,但要做到这一点,我需要重新启动 JVM 以添加调试端口/参数,但随后需要等待几个月才能出现相同的情况。
在不重新启动JVM的情况下如何做到这一点?是否有任何转储工具可以帮助我解决这种特定情况?