cat case/PM-2012-0084.md

Knight Capital 2012-08-01 部署漏复制+标志位复用致 Power Peg 复活,45min 亏 4.6 亿刀

P0 · 45 分钟内产生 400 万笔错误成交、154 只股票超 3.97 亿股,累积逾 40 亿美元 unwanted 头寸,亏损超 4.6 亿美元

summary

2012-08-01 开盘前,Knight Capital 为适配纽交所零售流动性计划(RLP)向 8 台生产 SMARS 服务器部署新代码。新代码本应替换一段名为 Power Peg 的废弃逻辑,并复用了一个原用于激活 Power Peg 的标志位。但一名技术人员只把新代码复制到了 7 台服务器,漏掉了第 8 台——该台上 Power Peg 旧代码仍在且标志位被新功能复用。开盘后发往第 8 台的父订单触发了休眠的 Power Peg 逻辑,它忽略了累计成交计数,无限发送子订单,造成市场混乱。

timeline

07-27 起分批次部署新 RLP 代码,至 08-01 前 7 台完成、第 8 台遗漏。09:30 开盘,第 8 台触发 Power Peg,海量子订单涌入市场。09:31 起华尔街察觉异常。工程师在实时环境中排查,一度从正确部署的 7 台卸载新代码(反而让 Power Peg 在所有服务器蔓延)。约 45 分钟后停止系统,已产生 4 亿+笔成交、亏损超 4.6 亿美元,4 个月后公司被收购。

root_cause

部署不完整(8 台只更新 7 台)+ 废弃代码未删除 + 标志位被复用,三者叠加使休眠的 Power Peg 逻辑在开盘后被激活;该逻辑缺少停止发送的累计计数保护。

amplifiers

① 无部署一致性校验:缺少第二人复核,漏部署一台未被发现。② 死代码未清理:Power Peg 多年未用却仍可被调用。③ 标志位复用:同一标志位语义被改,假设旧逻辑不再触发不成立。④ 无自动熔断:45 分钟内无人能一键停止。⑤ 应急处置反致扩大:卸载正确代码使故障蔓延。

mitigation

停止交易系统;事后 SEC 认定其违反 Market Access Rule(15c3-5),缺乏风险管控与监督流程;Knight 支付 1200 万美元罚金并被收购。

lessons

生产部署必须可验证、全量一致且有复核;废弃代码应物理删除而非保留待用;高危标志位不可复用;自动交易系统必须带硬上限与一键熔断。

checklist

① 部署增加全量一致性与第二人复核。② 彻底清理死代码。③ 禁止复用控制标志位。④ 交易系统设自动熔断与资本阈值硬限。⑤ 应急流程禁止在实时环境试错。