Firefox 或 Chrome 未释放句柄

Firefox 或 Chrome 未释放句柄

我注意到,当浏览器(使用 Firefox 和 Chrome 测试)运行很长时间后,它会停止连接网站。我使用任务管理器发现浏览器进程的句柄数超过 90000。关闭时,浏览器句柄数开始下降,但在某个时候停止,关闭浏览器的唯一合理快速方法是终止该进程。此外,“系统”进程的句柄数很高,当浏览器被终止时,句柄数会下降。

由于我在两个不同的浏览器上都看到这种现象,所以这不可能是浏览器的错误。有什么想法可以解释这是什么原因造成的,以及如何消除它?

我运行的是 Windows XP SP3 和 Firefox 4.0.1。防病毒软件是 F-Secure Client Security 9.01 build 122。没有使用代理,而且关闭 F-Secure 防火墙似乎没有效果。

Netstat -nb 输出包含很多这样的行:

TCP 127.0.0.1:3682 127.0.0.1:3681 CLOSE_WAIT 4112
[firefox.exe]

我怀疑 F-Secure,但我现在不知道它是如何做到这一点的。

答案1

说实话,我不认为这是 Firefox 或 Chrome 直接存在的问题。我目前在 Chrome 中打开了 1220 个标签页,在 Firefox 中打开了 732 个标签页,这种情况已经持续了一周多,没有重启过。问题可能出现在几个不同的方面,但要找出罪魁祸首可能非常困难。

需要注意以下几点:

  • 路由器可以处理的最大连接数...(我见过家用路由器的活动连接数限制为 4k,而其他路由器的活动连接数则超过 250k。)不幸的是,制造商并不总是会充分记录此限制。您可能还想看看还有什么正在建立连接(即后台是否正在运行某些 p2p 程序?)
  • 您是否使用代理?(病毒也可能充当代理并会导致类似的问题)代理软件也可能有这些限制,并且症状类似。
  • 您正在访问的网站可能是造成这种情况的一个因素。一些网站使用多种技术,最终会与主机建立多个连接以最大限度地提高网站的吞吐量和/或建立多个连接以允许与服务器进行双向通信。刷新或重新连接到网站,甚至弄乱 javascript(即禁用 javascript 或使用“noscript”等程序)都可能无意中导致网站本身尝试与服务器建立其他连接,并且问题可能会成倍增加。

如果没有更多有关正在发生的事情的信息...我只能猜测。

答案2

总结:我终于找到了导致 Windows 7 中出现此错误的原因(当然也包括所有其他 Windows 版本)。实际上,它与 GDI 对象有关。

当 GDI 对象的数量达到 10 000 时,错误就会出现,之后 Chrome 会崩溃几次。现在,我只是想知道这是 Chrome 中的错误还是插件/扩展的错误。

要在任务管理器中查看 GDI 对象,请单击菜单“显示”→“选择列...”→选中“GDI 对象”复选框。


我在 Windows XP SP3 上使用 IE(我认为是 v7,或者可能是 6)时遇到过这种错误。我在使用 Chrome 时也遇到过这种情况,但仅限于 Windows 7 Home Premium。

我不认为防病毒软件是造成此问题的原因,因为我在一台新笔记本电脑(上个月购买)上遇到了这个问题,该笔记本电脑上安装了官方的 Windows 7 Home Premium,而且我从未安装过任何防病毒软件...(甚至安装和删除了!)

这个 bug 是如何出现在我面前的:

首先,当这个“错误”出现时,我从来没有打开过数百个选项卡,但每次浏览器都会运行很长时间(打开和关闭许多选项卡)。IE 也一样。

当我尝试下载任何内容时(打开新选项卡时也会出现类似问题),“保存”对话框没有出现(GUI 句柄不够?)。浏览器似乎冻结了,但当我将另一个窗口移到 Chrome 顶部时,我可以猜测保存对话框的框架/边框,因为存在刷新错误。因此对话框没有显示,但它还是“显示”了。我最终按下了 Esc 键,对话框关闭,浏览器“解冻”。

目前我的浏览器 Iron(基于 Chromium 的类 Chrome 浏览器)打开了 31 个选项卡,拥有大部分句柄的进程有 29203 个句柄,第二个进程有 2667 个句柄,然后explorer.exe有 1392 个句柄,等等。并且我没有 GUI 句柄问题。

当我遇到这个问题时,Iron 只有大约 7000 个句柄,因此认为这是一个句柄问题或浏览器管理不善的任何句柄泄漏是没有意义的。

我认为这是 Windows 的问题...也许是句柄回收系统,我不知道。

注意:当我在 Windows 7 上遇到此问题时,我运行了任务管理器,它显示正确。在 Windows XP(带有 IE)上,任务管理器也遇到了问题,而这台笔记本电脑上没有。我看不到任何进程,因为没有显示带有进程和列的网格!实际上,在我关闭 IE 并释放所有句柄之前,我无法在这台电脑上运行任何程序。

在 Windows 7(存在 Chrome 问题)上,GUI 句柄资源似乎被隔离了,因为我可以看到任务管理器并运行任何其他程序,而不会出现此 GUI 句柄匮乏/不足的情况。GUI 句柄问题仅限于 Iron。

由于我在 Windows XP 上使用 Iron 时从未遇到过这个问题,所以这个问题可能是由于插件引起的。

答案3

我禁用了所有“不必要的”浏览器插件,问题就解决了。我不确定是哪一个。

相关内容