问题标签 [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 回答
558 浏览

gtk - 在开罗重新聚焦或在 Windows 上使用 gtk 时 GDI 对象泄漏?

我有一个使用 cairo、poppler 和 gtk+ 的程序 (gummi)。每次我用 alt-tab 切换焦点时(但当我使用其他方式改变焦点时不会这么多),任务管理器告诉我它获得了 10-20 个 GDI 对象。GDIView 告诉我这些主要是位图和 DC,尽管这些仅占“GDI Total”的大部分;“All GDI”的数量是“GDI Total”的 3-4 倍。

我如何确定这是否是 gummi 中的错误(我认为这不太可能,因为我认为 gummi 在重新聚焦/重绘方面没有任何作用)、cairo、poppler 或 gtk?我如何去寻找错误在哪里,以便我可以提交错误报告?(或者,如果这是 gtk/cairo/poppler 的已知错误,有人可以指出错误报告吗?)

正如在其他线程( Win32Exception: Operation completed successfully )中提到的,windows 将进程限制为 10,000 个句柄,并且我有 gummi 段错误,大概是从达到这个限制。此类事件的 gdb 回溯复制如下。

我正在使用来自 gtk+-bundle_2.24.10-20120208_win32 的 cairo 和 gtk+,来自 http://www.gtk.org/download/win32.php 的 32 位下载,http : //ftp.gnome.org/pub/ gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip。该项目还使用了 gtksourceview-2.10.0、libpng-1.5.10、openjpeg-1.5.0、poppler-0.18.4 和其他一些库,它们都是从 MinGW 下的源代码构建的,我认为与这些库无关图形。

0 投票
1 回答
903 浏览

.net - GDI+ 对象泄漏(字体、画笔)

我在我的应用程序中遇到 GDI 字体和画笔泄漏。如何在我的源代码中找到已创建(和已处理的)对象?

我没有任何toHFont电话,对 Graphics 的所有访问都封装在 using 语句中。我从 GDIView 和 .NET Memory Profiler 等工具中知道它的画笔和字体 - 但他们没有说明在我的源代码中创建泄漏对象的位置。

我在 VS2008、.NET 3.5 中使用 C#。

0 投票
4 回答
1788 浏览

android - Android 传感器注销

我对传感器侦听器的注销感到困惑。假设我忘记注销一个监听器。应用程序销毁后会发生什么?

Android 操作系统会继续向应用程序发送消息吗?但是应用程序被破坏了,因此它的进程被终止了。任何人都可以帮助回答这个问题吗?谢谢 :)

0 投票
2 回答
2855 浏览

java - Eclipse 4.2 资源泄漏通过单独的关闭方法

我正在使用启用了资源泄漏警告的 Eclipse 4.2。

在我看来,此代码会产生错误的资源泄漏警告。

如果我重构代码,并将 close 方法拉到 finally 块中,一切都很好。

我可以以某种方式删除这些警告而不必复制close方法的代码并且不必禁用资源泄漏警告吗?

我在这里找到了一个错误报告,说明循环中发生了类似的事情,但我的代码中不存在循环。

0 投票
0 回答
154 浏览

mysql - mysql突然开始定期打开不成功的sockets

我拼命想弄清楚这里发生了什么,但在任何地方都没有看到这个特殊问题。我已经“继承”了数据库服务器(远程,在数据仓库中,由 ssh 访问)的管理(如在其中,不是我自己构建的),其中一些 php 守护程序在充当数据爬虫的 Linux 服务器上运行,插入并将相对稳定的信息处理到mysql中。

几天前,服务器崩溃并重新启动。我登录并重新启动了 mysql 服务器和爬虫,不再考虑它。一天半后,mysql服务器停止工作,我无法诊断它,因为我无法登录它,也没有响应“/etc/init.d/mysql stop”或其变体。根据日志文件,它经常抛出错误(每 4 分 16 秒一次),并说它打开的文件处理程序太多。然而,当我关闭爬虫时,我可以再次登录,但 mysql 不断抛出错误。我检查了 lsof,它显示了很多带有“无法识别协议”错误的打开套接字。

mysqld 28843 mysql 1990u sock 0,4 2856488 无法识别协议

mysqld 28843 mysql 1989u sock 0,4 2857220 无法识别协议

^成千上万的这些行

还以为是爬虫干的事情,重启了mysql,失败的socket就消失了。但是我很惊讶地看到 mysql 不断打开新的,即使爬虫没有运行。它非常有规律地这样做,每分钟大约有两个新的失败套接字,无论爬虫是否处于活动状态。我增加了允许 mysql 购买时间的最大文件处理程序数量,但我显然在寻找诊断和永久解决方案。

我在论坛上发现的此类错误(套接字泄漏)的所有描述似乎都是关于您自己的软件泄漏,而不是关闭其套接字。但这似乎是 mysql 本身在做这件事,并且从它工作正常时开始,任何代码都没有变化,只是服务器崩溃并重新启动。

有任何想法吗?

0 投票
3 回答
5818 浏览

java - 为什么此代码会生成“潜在资源泄漏”警告?

Eclipse (Juno) 给出以下警告:

潜在的资源泄漏:“os”可能未关闭

try在这段代码正文的第一行:

该方法openFileOutput被声明为抛出一个FileNotFoundException.

这是误报吗?这似乎是一个相当普通的执行路径分析。

0 投票
1 回答
444 浏览

javafx - JavaFX 压力测试失败

我们正在研究 JavaFX 2.2 作为构建桌面应用程序的框架。但是在花费大量开发人员时间之前,我们想确保 JavaFX 适合这项工作,因此我们进行了一个小型压力测试,看看它是否会泄漏资源。该测试在一个永无止境的循环中显示和隐藏一个包含标签和按钮的舞台。我们希望这会永远持续下去而不会出现问题,但是经过大约 15500 次迭代后,我们得到了这个异常

我们最好的猜测是 Stage 上的 show()/hide() 泄漏了一些资源,而 dheapmon 揭示了桌面堆内存实际上在测试期间泄漏,但我们没有达到限制(在我们的测试机器上为 20 MB)。GDI 句柄和 USER 句柄限制也不是问题,因为这些句柄没有泄漏(根据 Process explorer)。对导致异常的原因有什么建议吗?

0 投票
1 回答
603 浏览

c++ - C++ - SQLite3 在多线程环境中泄漏句柄

我写了一个简单的程序,它产生 10 个线程,每个线程打开一个数据库(所有线程通用),或者如果打开失败,则创建它(使用“Write-Ahead Log”选项),在数据库上创建一个表然后它去进入一个无限循环,在该循环中它一次将一行添加到其表中。我发现程序每 5 分钟泄漏大约 2 个句柄,我尝试了一个名为 Memory Verify 的工具,它告诉我泄漏的句柄是 SQLite3 文件锁(版本 3.7.13 上的第 34034 行),但我不确定这个错误是否在 SQLite 或我使用它的方式中。

我没有指定任何编译器选项来构建 SQLite3,因此它被构建为多线程,据我所知,多线程在我的情况下应该可以正常工作,因为每个线程都有自己的 SQLite 连接。

要打开或创建数据库,我使用以下代码:

每个线程中的硬循环调用 ExecuteQuery,它会准备、执行和完成 INSERT 语句:

你们在我的代码中看到任何错误还是 SQLite 中的已知问题?我试图用谷歌搜索它几天,但我找不到任何关于它的信息。

非常感谢您的帮助。

问候,

安德烈亚

PS我忘了说我在WinXP 64bit PC上运行我的测试,编译器是VS2010,应用程序是32位编译的,SQLite版本是3.7.13...

0 投票
2 回答
416 浏览

android - 文件流上的资源泄漏警告

为什么警告显示在行中fos = new FileOutputStream(file)?有趣的是,如果我删除if ( externalStorage )并只留下第一个分支,则不会显示警告:

0 投票
2 回答
1061 浏览

java - 如何在 Java 迭代器中使用 ExecutorService 而不冒资源泄漏的风险

我有一个 Java 迭代器,它列出了来自远程位置的项目。项目列表以“页面”形式出现,“获取下一页”操作相当缓慢。(具体来说,我的迭代器被调用S3Find并列出了来自 Amazon S3 的对象)。

所以,为了加快速度,我想预取一个列表页面。为此,我使用了一个ExecutorService和一个Callable/Future模式来预取项目的“页面”。问题是,该迭代器的调用者可能随时放弃操作,而不通知我的班级。例如,考虑以下循环:

结果,a 有资源泄漏,因为即使没有更多对包含的引用(并且即使下一次预取已经完成)ExecutorService,我用来提交的那个仍然保持活动状态并运行。CallableS3Find

处理这个问题的正确方法是什么?我使用了错误的方法吗?我是否应该ExecutorService为每个预取放弃并使用一个新的裸线程(并在预取完成时终止线程)?请注意,每次获取页面大约需要 500 毫秒,因此相比之下,每次创建一个新线程可能可以忽略不计。我不想要的一件事是要求调用者明确告知S3Find他们已经完成迭代(因为它肯定会被某些人忘记)。

这是当前的预取代码(内部S3Find):