启动 Chromium 时,Firefox 以 100% CPU 使用率冻结 30 秒

Byt*_*der 27 performance firefox fonts chromium

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

在大约 30 秒内,Firefox 的子进程会消耗所有可用的 CPU 资源,导致网站停止渲染(已显示的页面冻结,新页面显示带有灰色旋转圆圈的白色页面),而整个窗口仍在响应(菜单、页面滚动) ,切换选项卡,甚至像 about:config 或 about:preferences 这样的内部页面也能工作...)。铬本身没有任何症状。在 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
Run Code Online (Sandbox Code Playgroud)

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

一些系统规格(更新):

  • Ubuntu 16.04(64 位)
  • 火狐 62.0+build2-0ubuntu0.16.04.5 63.0+build2-0ubuntu0.16.04.2
  • 69.0.3497.81-0ubuntu0.16.04.1 70.0.3538.77-0ubuntu0.16.04.1
  • fontconfig 2.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% 的无响应时间范围应大致对应于 Content Proc 时间轴上突出显示的区域,从大约 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)彼此表现得很好?

Byt*_*der 21

TL;DR:这是fontconfig2.13 版之前的问题。可以通过将软件包升级到 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/