火影忍者
请3休13!“超长假期”马上来了_我的网站

一 |
中秋、国庆假期“请3休13”火了!
今年
中秋、国庆假期只相隔3天
“请3天假休13天”的拼假方案走红
直接解锁近半个月的出行窗口期
不少人早早做了出游功课
出游规划的时间线大大提前
超长假期点燃出游欲
长线跨省游成主流
距离中秋假期还有一个月时间,各地线下旅游门店已经迎来不少前来咨询双节出游的消费者,希望能面对面敲定自己的假期出行计划。

二 | 作者 | Steef-Jan Wiggers
译者 | 平川
OpenAI 的工程师们花了数周时间,试图解释 Rockset 中那些神秘的崩溃问题。Rockset 是一款 C++ 数据基础设施服务,为 ChatGPT 的搜索和数据插件提供支持。函数似乎会返回错误的内存地址,栈指针在执行过程中似乎会偏移 8 个字节。团队提出的每一种假设都面临着有力的反证。拼假出游时间拉长,很多人都在规划跨省长线旅行:
有人落地喀什打卡南疆民俗,预算12000至15000元;
有人计划川西玩七八天,再到成都休整;
有河北邯郸的游客打算自驾7天,打卡山东青岛、烟台、威海沿海环线。这个 Bug 似乎根本不可能存在。

三 | 面对节假日机票酒店涨价,不少游客也表示理解,认可假期适度溢价是市场常态。

四 | 受超长假期带动,国内长线相关搜索、预订直接提前10天以上进入加速期。新疆、西藏、甘肃、云南、海南等长线目的地热度领先,亲友小团游最受欢迎。
他们原本以为是一个 Bug ,结果却发现是两个互不相关的 Bug ,它们只是很巧合地在同一时间被发现了。这一突破性发现并非来自对单个崩溃事件的深入排查,而是源于转向了他们所说的“流行病学调试”:构建一条管道,自动分析过去一年中生产环境的每一个核心转储文件,然后寻找整体规律,而不是对单个案例进行推断。 针对消费者拼假出行的多元需求,多家旅行社以及旅行平台有针对性地推出了团队游、自由行、定制游以及长线邮轮游等多元化产品组合,覆盖不同人群的个性化出行选择。

五 | 部分旅行社推出的研学康养、非遗体验、户外徒步、乡村旅行等路线已经出现供不应求的情况。 各大旅游平台数据显示,8月以来,中秋国庆假期出发机票搜索热度同比上涨61%,国内热门城市抢订热度同比增长30%。
该团队让 ChatGPT 编写了一个脚本,用于下载每个核心文件的开头部分,提取寄存器数据,过滤已知的误报,并将每次崩溃标记为“返回空指针”、“栈对齐错误”或其他类型。他们将该脚本并行应用于过去一年中的所有 Rockset 核心转储文件。他们很快就发现了相关性。原本从症状上看属于同类的问题,实际上对应两组特征完全不同的崩溃事件。

六 |
这些因栈对齐错误导致的崩溃均源自同一个 Azure 区域,有明确的起始日期,而且从未出现在长期运行的节点上。此外,福建平潭、广西阳朔等县域目的地,也成为今年假期抢订的新晋黑马。团队追踪发现,这些崩溃源自一台物理主机,其 CPU 正在悄无声息地产生错误的结果。它既没有过热,也没有抛出机器检查异常,而只是数学运算默默出了错。将该主机从服务中移除后,因栈对齐错误导致的崩溃便完全消失了。 出境游搜索热度同比大涨72%
“新兴免签目的地”带来尝鲜型增长
超长假期叠加多国免签的便利化政策,也释放了远途出境游需求。更充裕的时间、更灵活的拼假方案,不仅意味着更远的飞行半径,也给游客带来更多自主选择空间。
在剔除硬件崩溃问题后,剩余的由“返回空指针”导致的崩溃问题便变得可控了。 综合各大旅游平台数据,8月以来,中秋国庆出境游搜索热度同比大涨72%,欧洲、南美远途目的地机票增长亮眼。其中“00后”首次出境游预订量占比同比提升了6个百分点。此前,团队曾排除了 C++ 异常展开的原因,因为他们认为自己找到了反例:在未使用异常的代码路径中发生了崩溃。

七 | 但这些反例全都来自有硬件损坏的故障集群。
△江苏宿迁,办理出入境业务的市民络绎不绝。 中国护照的出行便利度也在提升。免签目的地凭借说走就走的优势,成为不少消费者出境游的首选。此外,双节叠加形成的超长出行窗口,让消费者更倾向于户外体验、人文探访相结合的深度游。一旦剔除了这些干扰因素,剩余的所有崩溃便都是发生在异常展开过程中了。 像乌兹别克斯坦这样的新兴目的地,也受到不少中国游客的青睐。8月以来,中秋国庆期间,国内出发至乌兹别克斯坦的机票预订同比增幅超过30%。 春秋集团总裁王炜表示,目前中秋国庆双节出境游预订占比已超50%,欧洲游多数产品已基本售罄,节奏快于去年。

八 | 长线深度游、精致小团、定制化产品市场占比大幅提升,游客选择更加多样化。

九 |
问题发生的根本原因是 GNU libunwind 的 _Ux86_64_setcontext 函数中有一个已经存在 18 年的竞争条件。在 C++ 异常展开过程中,libunwind 会在栈上合成一个 ucontext_t 结构体,填充所需的寄存器状态,然后调用 _Ux86_64_setcontext 将控制权转移给清理处理程序。问题在于:_Ux86_64_setcontext 在从旧结构体中读取指令指针的操作尚未完成之前,就将栈指针(%rsp)更新为指向新的栈帧。一旦 %rsp 发生变化,该结构体便不再属于活动栈的一部分,也不再受内核红区的保护。如果信号恰好在 %rsp 更新与 %rip 读取之间的这一时间窗口内到达,内核就会在该结构体之上构建其信号帧,指令指针遭到破坏,函数便会跳转到 NULL 或垃圾地址。
竞争窗口的宽度正好为一条指令。以现代处理器的时钟频率计算,这大约相当于 100 皮秒。在大多数程序中,这种情况根本不会被触发。OpenAI 的 Rockset 使用了 timer_create 函数,每隔几毫秒的 CPU 时间就发送一次 SIGUSR2 信号,为的是实现轻量级的按查询记账,这样产生的信号发送事件远多于传统的应用程序。正是这种高频的信号发送,将只在理论上可能发生的竞争状况转化成了实际生产环境中的崩溃。
该团队将一个修复方案和一个自包含的重现示例提交到了 GNU libunwind,并通过验证证实,其他展开器(如 libgcc)不存在这个问题。该修复方案通过重新排序指令,确保在更新 %rsp 之前先读取 %rip,从而彻底消除了这个时间窗口。
该团队对这一教训的总结值得全文引用:
最重要的步骤并非巧妙地解读汇编代码,也不是对细节的深入了解,而是构建一个高质量的数据集。如果没有这个数据集,我们就会把两种截然不同的现象混为一谈,并试图通过推理来理清这种混乱。一旦获得了准确且完整的全量数据,问题的结构便显而易见了。
如果你的团队正在排查难以解释的生产环境崩溃问题,请检查你们是否将多个 Bug 混为一谈。那些看似与所有假设都不相符的症状,实际上可能并不矛盾;它们可能与两个不同的假设相符,而你却无意中将它们混淆了。洞察问题结构的最快途径,并非对单个案例进行更深入的分析,而是获取涵盖所有故障案例的完整、带标签的数据。

十 |
这篇完整的工程技术博文包含了详细的栈内存示意图、存在漏洞的汇编指令,以及揭示出两种不同类型故障的崩溃率可视化图表。

十一 |
https://www.infoq.com/news/2026/07/openai-libunwind-core-dumps/
声明:本文由 InfoQ 翻译,未经许可禁止转载。
Current article:http://t9jpif.shengyaodanrongchui.buzz/kiouo/20260826/1018842.html
Published on:09:00:10