我给容器设了 CPU limit,监控上 CPU 用量明明远没到上限,服务却偶发严重的延迟尖刺和卡顿,查了半天才发现它一直在被悄悄节流:一次容器 CPU limit 与 CFS 配额节流的深度复盘

我的服务跑在 K8s 上,设了 limits.cpu: "1"。线上偶发严重延迟尖刺(P99 从 50ms 飙到几百毫秒甚至超时),可 CPU 监控显示用量只有 50%~60%、远没到上限,内存正常、GC 也不频繁,往网络/下游/GC 查了好几天都没结果。直到看了平时从不关注的 container_cpu_cfs_throttled 指标才恍然大悟:CPU limit 不是稳定给你 1 核,而是通过 Linux CFS 的周期配额实现——每个 100ms 周期最多用 limit×100ms 的 CPU 时间;我的多线程服务在某个周期内几个线程一起猛干、瞬间用尽配额,就被 CFS 强制挂起到下个周期,这一暂停几十毫秒就是延迟尖刺的来源;而平均 CPU 使用率 50% 的假象,正是周期内猛用、用完被罚站平均下来的结果,完全掩盖了节流。这篇复盘从故障现场讲到 request 与 limit 的区别、CFS 周期配额与 throttling 机制、多线程为何易被节流、runtime 误判核数(GOMAXPROCS/ActiveProcessorCount),再到让 runtime 匹配 limit、谨慎设 limit、监控 cfs_throttled 而非只看使用率的完整正解,以及平均值会掩盖分布与瞬时问题、严重问题常藏在尾部和波动里、要看 P99 和分布而非只看均值的认知。

我给容器设了 CPU limit,监控上 CPU 用量明明远没到上限,服务却偶发严重的延迟尖刺和卡顿,查了半天才发现它一直在被悄悄节流:一次容器 CPU limit 与 CFS 配额节流的深度复盘

那个诡异的延迟尖刺,折磨了我好几天。我有个服务跑在 Kubernetes 上,给它设了 resources.limits.cpu: "1"(限制 1 核)。线上现象是:服务偶发严重的延迟尖刺——平时 P99 是 50ms,时不时就有一批请求飙到几百毫秒甚至超时;可我盯着 CPU 监控看,CPU 使用率明明只有 50%~60%、远没到那 1 核的上限,内存也正常,GC 也不频繁。我一度怀疑是网络、是下游、是 GC……查了好几天,直到我去看了一个平时从不关注的指标——container_cpu_cfs_throttled(CPU 被节流的时间/次数)——才恍然大悟,后背发凉:问题出在我对 CPU limit 的误解。CPU limit 不是"给你 1 个核、用满为止"那么简单;它是通过 Linux CFS 的"配额(quota)"实现的:在每个调度周期(默认 100ms)里,你最多只能用 limit×100ms 的 CPU 时间(limit=1 就是每 100ms 最多用 100ms CPU 时间);而我的服务是多线程的:某个请求来了,多个线程在某个 100ms 周期内一起猛干,瞬间就把这 100ms 的配额用完了;配额一用完,这个进程的所有线程会被 CFS 强制"暂停(throttle)",一直挂起到下一个 100ms 周期才恢复——这一暂停可能就是几十毫秒,请求的延迟尖刺就这么来的;而"CPU 平均使用率只有 50%"的假象,是因为它在每个周期的前几十毫秒猛用、用完配额被暂停、平均下来就只有 50%——平均值完全掩盖了"周期内瞬间打满、被节流"的真相。根本原因是:CPU limit 是基于 CFS 周期配额的"节流",不是"绝对的核数";多线程应用在周期内瞬间用尽配额就会被强制暂停到下周期,造成延迟尖刺,而平均 CPU 使用率会掩盖这种节流。问题的根,是我把 CPU limit 当成了"能稳定用 1 核",实则它是按 100ms 周期发配额、用完即被节流暂停,导致多线程突发负载下的延迟尖刺。这篇就把这次"CPU 节流"的坑,从头到尾复盘一遍。

故障现场:CPU 没用满,却一直在被节流

问题在于 CPU limit 的 CFS 周期配额机制,与多线程突发的冲突:

# 我给容器设的资源限制(看起来很合理):
resources:
  requests:
    cpu: "500m"     # 请求0.5核
  limits:
    cpu: "1"        # 限制1核 ← 问题在这

# 现象: 监控显示 CPU 使用率只有 50%~60%, 但服务偶发延迟尖刺、请求超时。
# 排查时一直没看的指标(看了才真相大白):
#   container_cpu_cfs_throttled_periods_total / cfs_periods_total ≈ 60%  ← 60%的周期被节流!
#   container_cpu_cfs_throttled_seconds_total 一直在涨 ← 持续在被节流。

# CPU limit 的真相: 它是 CFS 的"周期配额", 不是"绝对核数"
#   - CFS 周期默认 100ms (cpu.cfs_period_us = 100000);
#   - limit=1 → 配额 quota = 100ms CPU时间/每100ms周期 (cpu.cfs_quota_us = 100000);
#   - limit=2 → 配额 200ms/周期 (可在100ms内让2个核各跑100ms);
#   - 在每个100ms周期里, 进程的所有线程"加起来"最多用掉 quota 那么多CPU时间;
#     用完 → 整个进程被throttle(挂起), 直到下个周期才恢复。
#
# 为什么多线程更容易被节流(我的情况):
#   - 假设4个线程, limit=1(配额100ms/周期);
#   - 一个请求来了, 4个线程并行猛干, 25ms就一起用掉了4×25=100ms配额;
#   - 配额用完 → 4个线程全被挂起75ms(剩下的周期) → 请求卡住75ms → 延迟尖刺!
#   - 平均看: 100ms周期里只干了25ms活 → CPU使用率才25%(假象: "没用满"其实一直被节流)。

第一次看到 throttled_periods 占比高达 60% 时,我愣住了:"CPU 用量才一半,怎么会一直被节流?原来 limit 根本不是'给我 1 个核随便用',而是'每 100ms 发 100ms 的配额、用完就罚站到下一节课'啊!"这个坑最隐蔽的地方在于:它的"症状(延迟尖刺)"和"你盯着看的指标(CPU 平均使用率)"对不上——CPU 平均用量不高,会让你完全想不到是 CPU 受限,从而往网络、GC、下游等方向瞎查;真正的证据藏在 cfs_throttled 这个平时没人看的指标里下面就来拆解,CPU limit 到底该怎么设。

第一件事:搞懂 CPU limit、CFS 配额与 throttling

我顺着这次事故,把容器 CPU 限制的机制彻底理清了。

容器 CPU limit 到底是什么? 为什么会节流?

【核心: CPU limit 是 CFS 的"每周期(默认100ms)配额", 不是绝对核数; 进程在周期内用尽配额就被
   throttle(挂起)到下周期; 多线程突发负载极易触发, 而平均CPU使用率会掩盖节流——要看throttle指标】

1. request vs limit (两个完全不同的东西):
   - requests.cpu: 调度依据 + 保证的下限(决定Pod被调度到哪、争抢时的权重), 是"软"的保证;
   - limits.cpu: 硬上限, 通过CFS quota实现, 超了就被节流(throttle); 是"硬"的限制。

2. limit 怎么实现的(CFS — 完全公平调度器):
   - cpu.cfs_period_us = 100000 (100ms周期);
   - cpu.cfs_quota_us = limit × 100000 (limit=1 → 100ms配额/周期);
   - 每个周期内, cgroup里所有线程用掉的CPU时间总和 ≤ quota; 用完则全部挂起到下周期。

3. 为什么会延迟尖刺(节流的代价):
   - 突发请求 → 多线程并行 → 周期内很快用尽配额 → 被挂起几十ms → 那批请求延迟飙升;
   - 这是"间歇性"的: 不忙时不节流(快), 一忙就节流(慢) → 表现为偶发尖刺, 极难定位。

4. 平均CPU使用率为什么是"假象":
   - 它是"一段时间的平均": 周期内"猛用一下被罚站"被平均稀释 → 看起来没用满;
   - 真相要看: cfs_throttled_periods占比、cfs_throttled_seconds(被节流的周期数和时间)。

5. 还有一个坑: runtime 误判可用核数(放大节流):
   - JVM(老版本)、Go(GOMAXPROCS默认=机器物理核数)等, 默认按"宿主机的核数"决定线程数/并行度;
   - 一台64核机器上, Go默认GOMAXPROCS=64, 开一堆P并行 → 但limit只给1核配额 → 疯狂节流;
   - 必须让runtime感知cgroup limit(见正解): 否则它以为有64核、实际只有1核配额。

6. 该怎么办(正解预告):
   - 让runtime匹配limit(GOMAXPROCS、JVM ActiveProcessorCount);
   - 谨慎设CPU limit(很多场景只设request不设limit, 或设宽松些);
   - 监控throttling指标, 别只看CPU使用率。

一句话: CPU limit是CFS每100ms周期的配额、用尽即被节流挂起到下周期, 多线程突发极易触发延迟尖刺;
   平均CPU使用率会掩盖节流, 要看cfs_throttled指标; 让runtime匹配limit、谨慎设limit、监控节流。

这套认知,是整个坑的根。request vs limit:request 是调度依据和软下限,limit 是通过 CFS quota 实现的硬上限,超了就节流limit 怎么实现:CFS 周期默认 100ms,每周期配额 = limit×100ms,周期内所有线程用掉的 CPU 时间总和超配额就全部挂起到下周期为什么延迟尖刺:突发→多线程并行→周期内用尽配额→被挂起几十 ms→那批请求延迟飙升,间歇性、极难定位平均 CPU 使用率是假象:周期内"猛用被罚站"被平均稀释,真相要看 cfs_throttled 指标。runtime 误判核数:Go 的 GOMAXPROCS 默认按宿主机物理核、JVM 老版本同理,64 核机器上开一堆并行但 limit 只给 1 核配额→疯狂节流一句话:CPU limit 是 CFS 每 100ms 周期的配额、用尽即被节流挂起到下周期,多线程突发极易触发延迟尖刺;平均 CPU 使用率会掩盖节流,要看 cfs_throttled 指标;让 runtime 匹配 limit、谨慎设 limit、监控节流。

第二件事:正解——让 runtime 匹配 limit、谨慎设 limit、监控节流

知道了 CFS 配额机制,正解就清楚了:从三个方向治理。

# 正解1: 让 runtime 感知 cgroup limit, 别按宿主机核数并行
# --- Go ---
# 用 uber-go/automaxprocs: 自动把 GOMAXPROCS 设为 cgroup limit 取整, 一行 import 即可:
#   import _ "go.uber.org/automaxprocs"
# 或手动: GOMAXPROCS = ceil(limit); limit=1 → GOMAXPROCS=1, 不再开64个P疯狂节流。

# --- JVM ---
# JDK 8u191+ / 11+ 默认 -XX:+UseContainerSupport, 会按cgroup limit算可用处理器和堆;
# 老版本必须手动: -XX:ActiveProcessorCount=1 -XX:MaxRAMPercentage=75
# 否则JVM按宿主机核数定GC线程数、ForkJoinPool大小 → 一堆线程抢1核配额 → 节流。

# 正解2: 谨慎设置 CPU limit(业界争议但主流倾向)
resources:
  requests:
    cpu: "1"        # request一定要设(调度保证), 设成稳态需要的量
  # limits:
  #   cpu: "2"      # ① 要么不设limit(让它能突发用空闲CPU, 靠request保证公平), 适合延迟敏感服务;
                    # ② 要么设宽松(比request高, 留突发空间), 别卡太死;
                    # ③ 真要设, 监控throttle, 别让节流率高。
  # 注: 不设limit的风险是"吵闹邻居"(一个Pod占满节点CPU), 需配合节点资源规划; 取舍看场景。

# 正解3: 监控节流指标(关键!别只看CPU使用率)
# PromQL: 节流周期占比 (>25%就该警惕)
#   rate(container_cpu_cfs_throttled_periods_total[5m])
#   / rate(container_cpu_cfs_periods_total[5m])
# 这个指标高 = 正在被节流 = 即使CPU使用率不高, limit也太紧或runtime没匹配。

# 正解4(我最终的处理):
#   - 加 automaxprocs 让 GOMAXPROCS 匹配 limit;
#   - 把 limit 从1调到2(留突发空间), request保持500m;
#   - 加 throttle 监控告警。 结果: 节流率从60%降到<2%, 延迟尖刺消失。

# 核心: CPU limit是CFS周期配额, 要让runtime并行度匹配它(automaxprocs/ActiveProcessorCount)、
#   谨慎设limit(不设或设宽松)、并监控cfs_throttled而非只看CPU使用率。

这套正解的关键,是从"误以为有很多核"回到"认清只有这点配额并据此调整"让 runtime 匹配 limit:Go 用 automaxprocs 自动设 GOMAXPROCS、JVM 用 UseContainerSupport/ActiveProcessorCount,别让它按宿主机核数开一堆线程抢配额。谨慎设 limit:延迟敏感服务可不设 limit(靠 request 保证、能突发用空闲 CPU)或设宽松些,别卡太死。监控节流指标:看 cfs_throttled_periods 占比(>25% 警惕),别只看 CPU 使用率被假象骗了。我最终的处理是 automaxprocs + limit 调到 2 + 加节流告警,节流率从 60% 降到 2% 以下,延迟尖刺消失。

第三件事:其他几个"资源限制反直觉"的坑

顺着 CPU 节流,我把容器资源限制相关的几个反直觉的坑也一并理了:

几个容器资源限制的反直觉坑:

坑1: memory limit 超了直接被OOMKill(不是节流, 是杀)——CPU超了是节流(throttle, 变慢),
   但内存超了是OOMKilled(直接杀进程, 同560篇)。CPU和内存的"超限处理"完全不同!

坑2: request设太低被超卖——节点按request调度, request低则节点上挤太多Pod, 真忙起来CPU争抢、
   大家都慢。request要设成"稳态实际需要的量"。

坑3: limit=request(Guaranteed QoS)更稳但浪费——QoS等级(Guaranteed/Burstable/BestEffort)影响
   被驱逐的优先级; Guaranteed最不易被驱逐但要limit=request, 没法突发。按重要性权衡。

坑4: 没设limit的Pod是"吵闹邻居"——它能用满节点空闲CPU, 可能影响同节点其他Pod; 不设limit要
   配合节点资源规划和监控。

坑5: HPA基于CPU使用率扩容, 但被节流时使用率不高 → 不扩容 → 越来越卡。
   被节流的服务, HPA可能"看不见"压力(使用率假象), 要基于更真实的指标(QPS、延迟、节流率)扩容。

共同的根: 容器的资源限制(CPU/内存/QoS)各有不同的机制和"超限后果"(节流vs杀vs驱逐vs争抢),
   而很多监控指标(平均CPU使用率)会掩盖真实状况; 要理解每种限制的确切机制、看对的指标。

这些坑看似分散,根却是同一个:容器的各种资源限制,机制不同、超限后果也不同(CPU 超限是节流变慢、内存超限是直接被杀、调度看 request、QoS 影响驱逐);而"平均使用率"这类直觉指标常常掩盖真相认清这个根("每种限制有其确切机制、要看对的指标"),才能不被表象误导。

第四件事:CPU limit 相关概念——一张对照表

我把这次踩坑涉及的几个容易混淆的概念,整理成一张表,贴在了团队的 K8s 资源规范里:

概念 含义 超限/不当后果
requests.cpu 调度依据 + 软保证下限 设太低被超卖,真忙时 CPU 争抢
limits.cpu CFS 周期配额硬上限 用尽即被节流(throttle)挂起,延迟尖刺
CFS period 调度周期,默认 100ms 配额按周期发放,周期内用尽就罚站
CFS quota limit × period 的 CPU 时间 所有线程总用量超它就全挂起
CPU 使用率 一段时间平均 CPU 用量 会掩盖周期内的瞬时节流(假象)
cfs_throttled 被节流的周期数/时间 真正反映 CPU 受限的关键指标
GOMAXPROCS / 处理器数 runtime 并行度 默认按宿主机核数,不匹配 limit 则狂节流
memory limit 内存硬上限 超了被 OOMKilled(杀,不是节流)

这张表里最关键的对比,是CPU 使用率 vs cfs_throttled:前者是会骗人的"平均值假象",后者才是反映 CPU 是否真的受限的"真相指标";以及 CPU 超限(节流变慢)vs 内存超限(直接被杀)的本质不同。看懂这张表,核心是一句:每种资源限制都有其确切的机制和超限后果,别用直觉(和平均使用率)想当然。

第五件事:关于 CPU limit 的几组容易想当然的认知

这次事故也让我厘清了几组关于 CPU limit 的、容易想当然的概念:

直觉以为 实际上
limit=1 就是稳定给我 1 个核用 是每 100ms 给 100ms 配额,用完就罚站到下周期
CPU 使用率不高就没有 CPU 问题 可能一直在被节流,平均值掩盖了瞬时打满
多设几个 limit 更安全 limit 太紧会频繁节流,反而拖慢延迟敏感服务
容器里 runtime 自动知道有几核 默认常按宿主机核数,需显式匹配 cgroup limit
CPU 和内存超限都差不多 CPU 超限是节流(变慢),内存超限是 OOMKill(杀)
延迟尖刺八成是 GC 或网络 也可能是 CPU 节流,先看 throttle 指标排除
HPA 看 CPU 使用率就能正确扩容 被节流时使用率不高,HPA 可能看不见压力

这张表里,我栽的是第一行和第二行:以为"limit=1 就是稳稳 1 核",又因为"CPU 使用率才 50%"而完全没往 CPU 受限的方向想,白白多查了好几天网络和 GC厘清这些,核心是一个意识:CPU limit 是一个有确切实现机制(CFS 周期配额)的限制,它的行为和"给你 N 个核"的直觉很不一样;要理解它的真实机制、并看能反映真相的指标(throttle),而不是被名字和平均使用率误导。

第六件事:设容器资源 / 排查延迟尖刺时,我现在的自检习惯

现在每当我要给容器设资源、或排查偶发延迟尖刺,我都会先按这张图问自己:

这张图的精髓,是"排查尖刺先看 throttle 别信使用率、让 runtime 匹配 limit、延迟敏感服务谨慎设 limit"查尖刺先看 cfs_throttled、设资源让 runtime 匹配 limit、延迟敏感limit 宽松或不设、始终监控节流而非只看使用率这套习惯,让我从"设个 limit=1 就以为稳了"变成了"理解配额机制、看对指标、让 runtime 匹配"——核心始终是:CPU limit 是 CFS 每周期配额、用尽即被节流挂起,多线程突发易触发延迟尖刺;让 runtime 并行度匹配 limit、谨慎设 limit、监控 cfs_throttled 而非只看 CPU 使用率。

我立下的几条规矩

这场"CPU 没用满却一直被节流"的事故,换来了我配置容器资源时,刻进骨子里的几条铁律:

  1. CPU limit 是 CFS 每 100ms 周期的配额,用尽即被节流挂起到下周期,不是"稳定 N 核"。
  2. 多线程应用在周期内突发用尽配额会被强制暂停,造成偶发延迟尖刺。
  3. 排查延迟尖刺,先看 cfs_throttled 节流指标,别被"CPU 平均使用率不高"骗了。
  4. 让 runtime 并行度匹配 limit:Go 用 automaxprocs,JVM 用 UseContainerSupport/ActiveProcessorCount。
  5. 延迟敏感服务,CPU limit 设宽松或不设(靠 request 保证),别卡太死频繁节流。
  6. CPU 超限是节流(变慢)、内存超限是 OOMKilled(杀),两者机制和后果不同。
  7. 监控要看能反映真相的指标(节流率、延迟),别只看会被平均稀释的 CPU 使用率。

附:排查 CPU 节流的命令清单

最后,把我现在排查 CPU 节流常用的命令和指标,贴成一份清单:

# 1. 在容器内直接看 cgroup 的节流统计(最直接)
# cgroup v1:
cat /sys/fs/cgroup/cpu/cpu.stat
#   nr_periods         总周期数
#   nr_throttled       被节流的周期数  ← 这个相对 nr_periods 占比高 = 在被节流
#   throttled_time     被节流的总时间(纳秒) ← 一直在涨 = 持续节流
# cgroup v2:
cat /sys/fs/cgroup/cpu.stat   # 看 nr_throttled / throttled_usec

# 2. 看容器实际拿到的配额(确认 limit 生效值)
cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us    # 配额(-1=无限制)
cat /sys/fs/cgroup/cpu/cpu.cfs_period_us   # 周期(默认100000=100ms)
# quota / period = 实际核数; 100000/100000 = 1核

# 3. Go: 确认 GOMAXPROCS 是否匹配 limit
# 代码里打印: runtime.GOMAXPROCS(0)  ← 若=宿主机核数(如64)而limit=1, 就是没匹配!

# 4. Prometheus 告警规则: 节流率持续 >25% 告警
# expr: rate(container_cpu_cfs_throttled_periods_total[5m])
#       / rate(container_cpu_cfs_periods_total[5m]) > 0.25

# 5. kubectl 看 Pod 的资源配置和 QoS
kubectl get pod  -o jsonpath='{.spec.containers[*].resources}'
kubectl get pod  -o jsonpath='{.status.qosClass}'

这份清单的核心,还是那句话:排查"偶发延迟尖刺"时,cpu.stat 里的 nr_throttled 和 Prometheus 的节流率,是比"CPU 使用率"更能说真话的指标——别让平均值的平静骗了你,去看那个会暴露"被掐住的瞬间"的数字

补充一点我后来才意识到的:这种「平均值掩盖瞬时问题」的陷阱,在监控里其实无处不在——磁盘 IO 的平均利用率不高、却在某些瞬间被写操作打满导致请求卡顿;数据库的平均连接数正常、却在流量尖峰时瞬间耗尽连接池;线程池的平均活跃线程数不高、却在突发时排队堆积。它们和 CPU 节流是同一类问题:用「一段时间的平均」去描述一个「有剧烈瞬时波动」的系统,平均值会把那些「致命的瞬间」温柔地抹平,让你在数字的平静里对真正的危险浑然不觉。所以我现在养成了一个习惯:看任何「平均/利用率」指标时,都顺手问一句「它的峰值和分布长什么样」。

写在最后

回头看,这场由"CPU limit 的 CFS 配额节流"引发的、CPU 没用满却延迟尖刺的事故,真正教给我的,远不止"看 throttle 指标、让 runtime 匹配 limit"这一个技巧。它让我对"一个'平均值/汇总指标'看起来正常, 完全可能掩盖了'分布/瞬时/局部'层面的严重问题; 平均的平静下面, 可能藏着剧烈的波动",有了一次刻骨的体会。我栽跟头,是因为我用"CPU 平均使用率 50%"这个平均值,得出了"CPU 没问题"的结论——我忘了:"平均"是会骗人的那 50% 的"平静", 实际是"每个 100ms 周期里, 前 25ms 把 CPU 打到 100%、然后被罚站 75ms"剧烈波动的平均结果;我的请求, 恰恰是在那"被罚站的 75ms"里卡住的——问题不在"平均用了多少", 而在"分布上有没有被掐住的瞬间"; 而平均值, 恰恰把这种"掐住的瞬间"给抹平、掩盖了这让我领悟到一个关于"平均值与分布"的深刻认知:"平均值" 只是对一堆数据的一种高度压缩的概括,它天然会丢失"分布、波动、极值、瞬时"的信息——"平均水深 1 米的河, 也能淹死人"(有的地方 3 米深);很多严重的问题(延迟尖刺、长尾、偶发故障、局部过载), 恰恰不体现在平均值上, 而藏在分布的尾部、波动的峰值、瞬时的极端里;只盯着平均值/总量看, 会对这些"被平均稀释掉的局部灾难"视而不见这给了我一种看待数据和指标时的清醒:判断一个系统(乃至一件事)是否健康,不要满足于"平均/总量看起来正常",而要追问"分布是怎样的?有没有剧烈的波动、被掐住的瞬间、糟糕的长尾?"——去看 P99/P999 而非只看均值、看 throttle 而非只看使用率、看分布直方图而非只看一个数;"对'平均值的平静'保持警惕、主动去看分布和极值",是避免'被汇总指标掩盖、对局部的严重问题视而不见'的关键认清平均值会掩盖分布与瞬时的问题、严重问题常藏在尾部和波动里、要看 P99 和分布而非只看均值——这,是我用一次 CPU 节流的事故,换来的、关于容器资源、也关于如何正确看待数据指标的、最朴素也最深刻的领悟。如果这篇复盘,能让你下次排查"偶发延迟尖刺"时,在怀疑 GC 和网络之前,先瞟一眼那个 cfs_throttled 指标,那我对着那条"CPU 才 50% 却一直尖刺"的曲线百思不解的这几天,就值了。

—— 别看了 · 2026
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理 邮箱1846861578@qq.com。
技术教程

我给下游调用加了失败自动重试本想让系统更可靠,结果某次下游只是变慢,重试却把流量放大了好几倍直接把它压垮:一次重试风暴拖垮整个链路的深度复盘

2026-6-2 23:49:45

技术教程

我让大模型帮我写调用某个库的代码,它信誓旦旦地用了一个看起来特别合理的函数,我没多想直接上线,结果报错说这个函数根本不存在:一次轻信 LLM 幻觉、把流畅自信当成内容正确的深度复盘

2026-6-3 0:02:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索