最快的解决方案

最快的解决方案

最近,我开始观察到这种非常令人困惑和烦人的行为,更不用说在打开 Firefox 然后启动 Chromium 时令人担忧的行为:

大约 30 秒内,Firefox 的子进程将消耗所有可用的 CPU 资源,导致网站停止渲染(已显示的页面冻结,新页面显示带有灰色旋转圆圈的白色页面),而整个窗口仍然响应(菜单、页面滚动、切换选项卡,甚至 about:config 或 about:preferences 等内部页面都可以工作……)。Chromium 本身不会出现任何症状。在 Firefox 旋转时立即再次终止 Chromium 不会更快地停止该行为。

同样的情况也发生在我的常规 Firefox 配置文件上,一个全新的、未经修改的、没有任何附加组件等的 Firefox 配置文件,Firefox 在安全模式下启动,附加组件被禁用,Firefox 则以隐私模式启动。Chromium 也类似,我可以使用常规配置文件、隐身模式或临时配置文件启动它,总是产生相同的结果。

当 Chromium 运行并且我打开 Firefox 时,没有发生任何奇怪的事情。

从终端启动 Firefox 时,我有时会在它旋转时退出它时收到如下消息(请注意管道错误行提到一些 chromium ipc...):

ExceptionHandler::GenerateDump cloned child 32165
ExceptionHandler::SendContinueSignalToChild sent continue signal to child
ExceptionHandler::WaitForContinueSignal waiting for continue signal...
[Parent 26520, Gecko_IOThread] WARNING: pipe error (52): Connection reset by peer: file /build/firefox-8oo9jx/firefox-62.0+build2/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 353
ExceptionHandler::GenerateDump cloned child 32274
ExceptionHandler::WaitForContinueSignal waiting for continue signal...
ExceptionHandler::SendContinueSignalToChild sent continue signal to child

奇怪的是,我无法在访客帐户或新创建的常规(管理员)帐户中重现该行为。

一些系统规格(已更新):

  • Ubuntu 16.04(64 位)
  • 火狐62.0+build2-0ubuntu0.16.04.563.0+build2-0ubuntu0.16.04.2
  • 69.0.3497.81-0ubuntu0.16.04.170.0.3538.77-0ubuntu0.16.04.1
  • fontconfig2.11.94-0ubuntu1.1
  • 显卡硬件:Intel SkyLake 集成显卡 (i5-6200U) + Nvidia GeForce 940M
    目前我已经nvidia-410安装了驱动程序,但已切换到 Intel prime 配置文件。我该如何进一步排除故障并修复此问题?

我使用 Gecko Profiler Extension 创建了一个性能配置文件,并将其安装到我常用的 Ubuntu 帐户上的全新 Firefox 配置文件中。可以在此处找到它:https://perfht.ml/2zpTWsh- CPU 使用率为 100% 的无响应时间范围大致对应于内容处理时间线上突出显示的区域,大约从 18 秒到 56 秒。

我针对此问题创建了一个 Mozilla 错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id=1504461

重要更新:显然我的错误报告与https://bugzilla.mozilla.org/show_bug.cgi?id=1495900,指出这fontconfig是罪魁祸首。似乎启动 Chromium 会以某种方式更改字体配置,从而触发 Firefox 的完全重新加载。这符合性能分析报告,也与之前对字体包的更新如何触发相同类型的冻结相一致。

有什么想法可以使这三者(Firefox,Chromium,fontconfig)相互兼容?

答案1

总结:这是 2.13 版之前的问题fontconfig。可以通过将软件包升级到 2.13 或更高版本来修复(尽管我找不到合适的提供商)。或者,检查主目录中所有与字体相关的文件夹和配置文件,并测试删除其中任何一个是否可以解决您的问题。对我来说,重命名~/.fonts就可以了。


在了解了错误报告后https://bugzilla.mozilla.org/show_bug.cgi?id=1495900https://bugzilla.mozilla.org/show_bug.cgi?id=1411338很显然,问题一定是由引起的fontconfig

不知何故,当 Chromium 启动时,它会触发字体数据库 (???) 的更改,这会导致 Firefox(如果当前正在运行)以某种方式重新扫描文件系统以查找字体,从而导致 CPU 使用率和暂时冻结。

显然,将fontconfig软件包从版本 2.11 更新到 2.13(例如 Ubuntu 18.10 中附带的版本)应该可以解决这个问题,但我发现没有简单的方法可以在 16.04 上获取该版本,而不会破坏我已安装的许多其他软件包的依赖关系。

由于问题仅限于我的用户帐户,因此我检查了用户的本地字体配置和文件夹。老实说,字体相关的目录相当杂乱,包括~/.fonts、、、、,还有一些配置文件和特定于应用程序的字体内容~/.local/share/fonts~/.local/share-font-manager~/.config/font-manager~/.cache/font-manager~/.cache/fontconfig

我首先删除(重命名)了该~/.fonts文件夹,因为该文件夹似乎不包含任何有用的东西,而touch ~/.fonts/Library/在此之前的一个简单操作触发了 Firefox 的错误行为。该文件夹消失后,启动 Chromium 时的问题也消失了。\o/

答案2

背景

已经提出了这个 Firefox Bug 1492360:在打开 Firefox 而不是 Chrome/Chromium 时 CPU 使用率较高。这是 Bug 1495900 的重复:由于 FontConfig 字体重新扫描 (FcInitReinitialize),启动 Chrome 会导致 Firefox 内容进程挂起大约两分钟,才是罪魁祸首。

但我也在用 Firefox:

Firefox 版本.png

当我打开 Chrome 时:

Chrome 版本.png

我没有看到 CPU 性能受到任何影响。

这可能违背你的道德,但也许你可以google-chrome-stable像我一样尝试安装。然后再次进行测试。如果 CPU 使用率没有飙升至 100%,则可以在 Chromium 和 Chrome 之间提交错误报告。

我使用的是 Ubuntu 16.04.5 LTS。虽然内核目前是4.14.78LTS 链,但我认为这与它无关,因为我也没有注意到以前的内核对 CPU 的影响。

我唯一一次看到所有 CPU 都达到 100% 是在 期间update-initramfs


fontconfig版本

在错误报告中透露:

$ dpkg -l 'fontconfig*' | grep "^ii"
ii  fontconfig        2.12.6-0ubuntu2 amd64        generic font configuration library - support binaries
ii  fontconfig-config 2.12.6-0ubuntu2 all          generic font configuration library - configuration

在我的无错误版本中(可能是因为没有本地字体):

$ dpkg -l 'fontconfig*' | grep "^ii"
ii  fontconfig        2.11.94-0ubuntu1.1 amd64        generic font configuration library - support binaries
ii  fontconfig-config 2.11.94-0ubuntu1.1 all          generic font configuration library - configuration

我使用的2.11.94版本比错误报告2.12版本要早。在错误报告中,升级到2.13是推荐的解决方案,但 OP 在评论中提到这是不可能的。因此2.11.94 可能是一种选择。

答案3

从日志来看,Firefox 似乎出于某种原因使用了同步 IPC(进程间通信)。Firefox 中有一些标志可以明确启用同步 IPC(例如:network.cookie.ipc.sync)。其中一个可能已启用。您可以从关于:配置

延迟可能是 Firefox 等待响应的结果。由于 Chromium 启动完成或未主动运行时没有负载,因此会立即响应。

有关的:https://bugzilla.mozilla.org/show_bug.cgi?id=1331680

答案4

最快的解决方案

TL;DR?只需将此命令剪切并粘贴到终端中即可:

echo 'user_pref("security.sandbox.content.read_path_whitelist", "/var/cache/fontconfig/,'$HOME'/.cache/fontconfig/");' >> ~/.mozilla/firefox/*.default/user.js

并重新启动 Firefox。

细节

字体更新时 Firefox 冻结的问题(这是实际问题,而不是 Chromium)已通过告诉 Firefox 不要对字体缓存目录进行沙盒访问来解决。

补丁此方法据称可以修复 Firefox 76 中的问题。但是,我正在使用 Firefox 78.10.0esr,问题仍然存在。

请注意,虽然 2.13 版的 fontconfig 比早期版本好很多,但对于在 $HOME/.local/share/fonts 中安装了许多字体的用户来说,这种速度减慢仍然非常痛苦。在我的计算机上安装了 fontconfig 2.13.1,每次我在字体目录中使用touch或使用时,Firefox 都会出现 15 秒的 100% CPU 卡顿。rm

修复

编辑文件~/.mozilla/firefox/ RANDOM.default/user.js(可能不存在),添加以下javascript:

user_pref("security.sandbox.content.read_path_whitelist",
      "/var/cache/fontconfig/,/home/YOURNAME/.cache/fontconfig/");

注 1:出于难以捉摸的原因,Mozilla 决定在默认首选项目录的名称中添加随机字母和数字。大多数人只有一个配置文件,可以用来*.default解决这个愚蠢的问题。

注2:替换YOURNAME为您的用户名。

相关内容