一个小改变,让 Firefox 崩溃次数降低 70%


用户在 Windows 平台上使用 Firefox 时,遇到的最常见的不稳定原因就是崩溃,而且这一现象在 Windows 平台上的严重程度远高于 Linux 和 macOS。因此,Mozilla 花了大量的资源来减少 Firefox 的内存消耗,并仔细监测这些变化。然而,Mozilla 近日透露,他们此前所作出的所有努力都不如他们在 Firefox 105 中部署的一个小改变有效。

首先,要了解为什么在 Windows 上运行的应用程序与其他操作系统相比更容易耗尽内存产生崩溃,就必须了解 Windows 如何处理内存。

所有的现代操作系统都允许应用程序分配一块地址空间。最初在没有数据被存储在其中时,这些块只代表没有物理内存支持的地址范围。当一个应用程序开始使用它所保留的地址空间时,操作系统将拿出一块物理内存来支持它,如果需要的话,可能会交换掉一些现有的数据。Linux 和 macOS 都是这样工作的,Windows 也是如此,只是与其他操作系统相比,Windows 需要执行一个额外的步骤。

在一个应用程序请求了一块地址空间之后,应用需要在能够使用它之前提交使用范围,这个范围需要 Windows 保证它总是能够找到物理内存来支持它。之后,Windows 的行为就像 Linux 和 macOS 一样没什么区别了。因此,Windows 限制了可以提交的内存大小,即机器的物理内存加上交换文件的大小之和。

提交空间(commit space)是应用面对的硬限制,只要达到这个限制,内存分配就会失败。Firefox 开发者在分析浏览器崩溃问题时发现,在很多情况下发生崩溃时,用户设备上的可用物理内存仍然很多,但提交空间却耗尽了。

因此他们决定采用一些技巧来规避这一问题,也就是当内存分配失败时,浏览器不是立即崩溃,而是先等待下,然后尝试重新内存分配。虽然这会导致浏览器卡住短暂的几分之一秒,但远比彻底崩溃好得多(当交换文件快满时,Windows 会自动调整它的大小,增加可用的提交空间)。

Mozilla 在 Firefox 105 中应用了这一改变,显著改进了浏览器的稳定性。下面的图表显示了用户在每一个活跃的使用小时中经历了多少次内存耗尽的浏览器崩溃(崩溃次数减少了 70% 以上,远远超过了 Mozilla 当初的预测)。

Mozilla 表示,虽然他们已经在 Firefox 105 中实现了这项改进,但实际上这项改进还没有彻底完成,因为目前延缓主进程会导致标签页崩溃次数小幅增加,这对用户来说也是不愉快的使用体验,虽然没有完整的浏览器崩溃那么烦人,但团队依然在尝试减少这样的情况发生。


相關推薦

2022-01-21

待解决的 bug 。比如重新登录会导致鼠标指针黑屏、恢复 Firefox 时产生空/透明的窗口、桌面图标的位置有时会在重启时打乱...这些小 bug 虽然没有什么系统崩溃或者安全风险,然而它们大大降低了用户体验,让 KDE 的风评饱受影

2023-03-23

和内存占用。 事情的起因是 Maxim Smirnov 的团队发现了一个触摸板滚动问题,该问题影响了 Yandex 浏览器,但在同一台设备上,Chrome 和 Edge 却没有受到影响。在技术层面,Yandex 浏览器使用的触摸板事件处理逻辑与 Chrome 这些浏

2022-03-09

Firefox 98 如期而至,该版本最大的变化就是优化了下载流程,除此之外还有一系列的小改进、性能优化和安全性增强。 Firefox 98 优化了下载流程,改变了浏览器长期存在的一个行为。以往当用户使用 Firefox 下载文件时,浏览器

2023-10-13

2002 年 6 月 2 日,Firefox 用户报告了一个 bug:当鼠标悬浮在工具栏图标上时会展示相关提示(该项特性名为 'Tooltips')。如果此时将浏览器从前台切换到后台,该提示会仍然留在前台——就像幽灵一样。而摆脱这一恼人提示的唯

2023-06-29

btrace (又名 RheaTrace) 是一个基于 Systrace 实现的高性能 Android trace 工具,它支持在 App 编译期间自动注入自定义事件,并使用 bhook 额外提供 IO 等 native 事件。 RheaTrace v2.0.0 发布啦 ,此版本带来如下优化:   使用体验:支持

2022-11-04

面临着同样艰难的决定。根据官方统计目前大约有 18% 的 Firefox 用户仍然在使用 Windows 7(15%) 和 8.1(2.8%),虽然这一比例在过去几年中已经有了大幅下降,但其用户数量还是高于 Mac(4.2%) 和 Linux(3.2%) 等平台,仅次于 Window

2022-12-14

Firefox 108 是一个小版本更新,带来了对 Windows 11 效率模式的支持、新的快捷键,以及一些其他变化。 新功能: 允许网页控制 JavaScript 导入的行为「导入映射」,现在默认是启用的。 后台标签页的进程现在在 Windows 11 上

2023-07-08

的道路上不断前行。我坚信大模型将重塑千行百业,而每一个开发者,都将是改变世界的英雄。” 盘古大模型3.0:重塑千行百业 华为云盘古大模型从一开始就聚焦为行业服务,本次大会发布的盘古大模型3.0也是一个面向行业

2022-09-24

候说再见了。今后,Leaflet将转向一个常青的策略,针对Firefox、Chrome、Edge和Safari等浏览器。 拥抱现代JavaScript。为了保持向后兼容,Leaflet完全是用ES5编写的,这是传统浏览器所支持的JavaScript版本。因此,我们无法利用许多伟大

2022-06-01

Mozilla 于今天正式发布 Firefox 101 版本,相比 Firefox 100 版本,该版本仅仅带来小幅更新,引入了少量变化和一些改进。 Firefox 101 中最有趣的变化是 Mozilla 重新实现了下载文件时保存或打开文件的对话提示,该提示此前在 Firefox 98

2023-06-22

Firefox 114.0.2 是 Firefox 114 的第二个修复更新,修复了浏览器中的多个崩溃,并纠正了 Web Extensions 回归。 Firefox 114.0.2 解决了影响某些浏览器用户的三个崩溃问题: 第一个修复解决了影响安装了 ESET 安全软件的 Microsoft Windows 7

2022-06-01

,当应用程序使用的内存被返回到底层系统,但指针指向一个过期的对象时,就会出现一个被称为悬空指针(dangling pointers)的情况,通过它进行的任何访问都会导致 UAF 访问。在最好的情况下,此类错误会导致 well-defined 的崩溃

2023-03-30

Windows 8.1 操作系统的一些计划,跟上面这些厂商不同,Firefox 将继续继续这些操作系统,至少到 2024 年第三季度。 这一消息是 Mozilla 的软件工程师 Mike Kaply 在 Bugzilla 上透露的: 在 Firefox 115 ESR 发布之前,我们不会停止对 Wi

2023-03-23

Mozilla Firefox 111.0.1 发布了,此版本修复了 Windows 11 和 macOS 的崩溃问题。 修复了 macOS 双指缩放时的崩溃问题 Mozilla 平台工程师 Brad Werth 在已合并的修复补丁中解释称该 Bug 是在 macOS 系统上缩放时因 NativelayerCA 检查无效区