Skip to content

[CRITICAL] OutlinePodOOMKilled #39

Closed

Description

@Wyifei

Severity: critical
Status: firing
Summary: Outline pod outline-web-8795c86-8srcl OOM Killed

Activity

  1. Wyifei commented on May 26, 2026

    @Wyifei
    OwnerAuthor

    DevOps Agent 调查已创建

    • 优先级: HIGH
    • Task ID: dd54ae1b-fbc5-4a21-8edd-35322bd9bff5

    👁 在 Operator Web 中查看调查

    调查正在排队...

  2. Wyifei commented on May 26, 2026

    @Wyifei
    OwnerAuthor

    DevOps Agent 调查进行中

    • 优先级: HIGH

    👁 在 Operator Web 中查看调查

  3. Wyifei commented on May 26, 2026

    @Wyifei
    OwnerAuthor

    ✅ DevOps Agent 调查完成

    • 优先级: HIGH

    👁 在 Operator Web 中查看调查


    根因摘要

    Investigation Summary

    Symptoms

    Outline-web pod outline-web-8795c86-8srcl 反复被 OOMKilled

    Description: 新部署的 ReplicaSet outline-web-8795c86 中的 pod outline-web-8795c86-8srcl 在启动后约 4 秒内被 OOMKilled(退出码 137)。Pod 已重启 5 次并处于 CrashLoopBackOff 状态。容器内存限制为 200Mi,请求为 180Mi。最后一次终止发生在 2026-05-26T02:31:48Z,容器启动时间为 2026-05-26T02:31:44Z。
    Time: 2026-05-26T02:28:23Z

    Outline-web deployment 滚动更新无法完成

    Description: Deployment outline-web 正在尝试滚动更新(修订版本 19),但新的 ReplicaSet outline-web-8795c86 中的 pod 无法启动成功。旧的 ReplicaSet outline-web-588f4876cc 中的 3 个 pod 仍在健康运行(已运行 41 小时),deployment 状态显示 1 个 pod 不可用。
    Time: 2026-05-26T02:28:23Z

    Findings

    Cause: 新 ReplicaSet 的内存限制配置严重不足(200Mi vs 1Gi)

    Description: 新部署的 ReplicaSet outline-web-8795c86 的内存限制被配置为 200Mi,而旧 ReplicaSet outline-web-588f4876cc 的内存限制为 1Gi。这是一个 5 倍(80%)的内存削减。指标数据显示健康 pod 的稳定内存使用量在 509-667MB 之间,远超过 200Mi 限制的 2.5-3.3 倍。新 pod 在启动时仅能分配约 2-3MB 内存就被 OOMKilled,说明应用根本无法完成初始化阶段(Node.js 运行时加载、依赖加载、数据库连接等)。200Mi 的限制无法满足 Outline 应用的最低运行需求。
    Cascades to: cause-003-app-init-incomplete

    Supporting Observations

    • 新 Pod 内存限制从 1Gi 降低到 200Mi,导致立即 OOMKilled: 新部署的 ReplicaSet outline-web-8795c86 的 pod 内存限制被配置为 200Mi(209715200 字节),而旧 ReplicaSet outline-web-588f4876cc 的 pod 内存限制为 1Gi(1073741824 字节)。这是一个 5 倍的内存限制削减。健康运行的 pod 稳定使用约 500-650MB 内存,这远超过新配置的 200Mi 限制。新 pod 根本无法完成正常启动,指标显示其内存使用量仅约 3MB 就停止了,说明应用在初始化阶段就因内存不足而失败。
    • 健康 Pod 的稳定内存使用量在 509-667MB 之间: 在基线时间窗口(01:30-02:00)中,三个健康运行的旧 pod 显示稳定的内存使用模式。outline-web-588f4876cc-lgqk5 使用约 646MB,outline-web-588f4876cc-j5z2s 使用约 509MB,outline-web-588f4876cc-hjxb8 使用约 535MB。这些 pod 都在 1Gi 内存限制内安全运行,使用率约为 50-65%。内存使用量非常稳定,没有异常增长或泄漏迹象,说明应用在正常负载下需要至少 500MB 以上内存才能稳定运行。
    • OOM 事件期间健康 Pod 持续使用 516-667MB 内存: 在 OOM 事件发生的同一时间窗口(02:28-02:32),三个旧 ReplicaSet 的健康 pod 继续稳定运行。outline-web-588f4876cc-lgqk5 使用约 653-667MB,outline-web-588f4876cc-j5z2s 使用约 516-524MB,outline-web-588f4876cc-hjxb8 使用约 543-559MB。这些稳定的内存使用模式证明了应用正常运行需要至少 500MB 以上的内存。与新 pod 的 200Mi 限制相比,健康 pod 的实际使用量是限制值的 2.5-3.3 倍,这清楚地说明了为什么新 pod 无法启动。
    • 新 Pod 内存使用仅 2.5-3MB 表明应用启动失败: 新 pod outline-web-8795c86-8srcl 显示两次容器启动尝试,第一次(容器 ID aeb4f5e8...)在 02:28:26 记录内存约 2.6MB,第二次(容器 ID 3cf748bd...)在 02:31:45 记录内存约 3.1MB。这些极低的内存使用量(仅为健康 pod 的 0.5-0.6%)表明容器在应用初始化阶段就失败了。正常的 Node.js 应用启动通常需要数百 MB 内存来加载依赖、初始化连接池等。容器显然在达到 200Mi 限制之前就因内存不足而被 Kubernetes OOMKilled。

    Cause: 应用在 OIDC 插件初始化阶段就因内存不足被终止

    Description: 问题 pod 的日志显示应用只输出了 2 条正常的 OIDC 插件初始化日志('OIDC endpoints mounted with manual configuration' 和 'OIDC plugin registered')后就被 OOMKilled。日志在启动初期被截断,应用无法完成后续的启动序列(数据库连接、WebSocket 初始化等)。健康 pod 的日志对比显示完整的应用生命周期,没有任何应用层面的错误、内存泄漏或异常行为。这证实了问题完全由配置错误导致,而非应用代码缺陷。
    Cascades to: sym-001-oom-killed

    Supporting Observations

    • 内存限制不足导致 outline-web 容器快速 OOMKilled: 新部署的 ReplicaSet outline-web-8795c86 将内存限制从 1Gi 大幅降低至 200Mi (仅为原来的 1/5)。这个内存配置不足以支持 Outline 应用启动,导致容器在启动后约 4 秒内被 OOMKilled。Pod outline-web-8795c86-8srcl 已重启 5 次,每次都在启动初期被终止。Kubernetes 日志显示容器只能输出 2 条 OIDC 插件注册的日志后就因内存不足被终止,无法完成完整的启动序列。对比健康运行的 ReplicaSet (588f4876cc, 684744d5ff) 均使用 1Gi 内存限制且运行稳定。
    • 应用启动日志正常,无应用层面错误: 应用启动日志没有显示任何应用层面的错误、内存泄漏或异常行为。问题 pod 仅能输出 2 条 OIDC 插件初始化日志后就被 OOMKilled,这是因为 200Mi 内存限制完全不足以支持 Outline 应用完成启动序列。对比健康 pod 使用 1Gi 内存限制并能正常完成启动和运行,没有发现任何启动异常。根本原因是配置错误,而非应用缺陷。

    Root Cause: 用户通过 kubectl PATCH 手动将内存限制从 1Gi 降低到 200Mi

    Description: EKS 审计日志显示用户 yifeiwf-Isengard 于 2026-05-26T02:28:23Z 从 IP 15.248.5.235 通过 kubectl 对 Deployment outline-web 执行了 PATCH 操作,修改了资源配置:内存限制从 1Gi 降至 200Mi(减少 80.5%),内存请求从 512Mi 降至 180Mi(减少 64.8%)。此操作触发了 Kubernetes 滚动更新机制,创建了新的 ReplicaSet outline-web-8795c86。这是自 2026-05-24 以来一系列手动配置调整的一部分,该用户在 3 天内执行了超过 12 次 PATCH 操作。
    Cascades to: cause-001-memory-limit-too-low

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    criticalincidentIncident trigger for DevOps Agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions