← 回總覽

Pinterest 工程师消除 CPU 僵尸进程,解决生产环境瓶颈

📅 2026-05-23 13:30 AI前线 软件编程 2 分鐘 1530 字 評分: 86
Pinterest Kubernetes CPU 瓶颈 性能调优 cgroup
📌 一句话摘要 Pinterest 工程师通过深入排查,发现 AWS 深度学习 AMI 中默认启用的 ECS 代理崩溃循环导致内存 cgroup 泄漏,形成“僵尸”进程,最终通过禁用该代理解决了机器学习训练任务的 CPU 资源饥饿问题。 📝 详细摘要 本文详细记录了 Pinterest 工程师如何追踪并解决其基于 Kubernetes 的机器学习平台 PinCompute 上出现的间歇性 CPU 资源饥饿问题。该问题导致训练任务成功率下降超过 25%,表现为弹性网络适配器(ENA)设备重置和数据包丢失。由于高级仪表盘无法定位问题,团队转而使用 mpstat 进行逐核分析,发现个别内核的 C

📌 一句话摘要

Pinterest 工程师通过深入排查,发现 AWS 深度学习 AMI 中默认启用的 ECS 代理崩溃循环导致内存 cgroup 泄漏,形成“僵尸”进程,最终通过禁用该代理解决了机器学习训练任务的 CPU 资源饥饿问题。

📝 详细摘要

本文详细记录了 Pinterest 工程师如何追踪并解决其基于 Kubernetes 的机器学习平台 PinCompute 上出现的间歇性 CPU 资源饥饿问题。该问题导致训练任务成功率下降超过 25%,表现为弹性网络适配器(ENA)设备重置和数据包丢失。由于高级仪表盘无法定位问题,团队转而使用 mpstat 进行逐核分析,发现个别内核的 CPU 使用率会持续 100%。通过性能捕获和 Netflix Flamescope 可视化,他们将问题根源定位到 kubelet 进程在内核函数 mem_cgroup_nr_lru_pages 上的异常高占用。最终发现,问题源于 AWS 深度学习 AMI 中默认启用的 Amazon ECS 代理,该代理在崩溃循环中泄漏了约 70000 个“僵尸”内存 cgroup,导致 kubelet 在同步状态时遍历列表而独占内核。解决方法是在基础镜像中禁用 ECS 代理并重启机器。文章强调了深入理解系统堆栈、质疑默认配置以及持续性能分析的重要性。

💡 主要观点

- Pinterest 的机器学习训练任务因 CPU 资源饥饿而崩溃,根源是“僵尸”cgroup。 AWS 深度学习 AMI 中默认启用的 ECS 代理陷入崩溃循环,泄漏了大量内存 cgroup,导致 kubelet 进程在同步状态时独占 CPU 内核,最终引发网络设备重置和任务失败。

高级监控仪表盘掩盖了底层问题,逐核分析是定位瓶颈的关键。 汇总的 CPU 利用率看似正常,只有通过 mpstat 进行逐核分析,才发现个别内核的 CPU 使用率持续 100%,从而找到了问题的突破口。
解决方法是禁用基础镜像中冗余的 ECS 代理,并清理累积的 cgroup。 问题的根源是一个未被使用的默认配置,禁用后,内存 cgroup 数量恢复稳定,网络重置现象消失。这体现了对系统默认配置持质疑态度的重要性。

💬 文章金句

- 通过识别团队所说的“僵尸”(即由崩溃循环的默认代理所留下的内存泄漏 cgroups),工程师们成功地恢复了分布式计算平台的稳定性。

  • 这一经验表明,应用程序、编排器与内核之间的抽象层往往会掩盖真正的原因:在这个案例中,正是冗余的用户空间守护进程导致了内核状态泄漏。
  • 他们的实践经验为软件工程师们敲响了重要的警钟:要对系统默认设置持质疑态度,并熟练掌握底层诊断工具。

📊 文章信息

AI 初评:86

来源:AI前线

作者:AI前线

分类:软件编程

语言:中文

阅读时间:7 分钟

字数:1664

标签: Pinterest, Kubernetes, CPU 瓶颈, 性能调优, cgroup

阅读完整文章

查看原文 → 發佈: 2026-05-23 13:30:00 收錄: 2026-05-23 20:00:59

🤖 問 AI

針對這篇文章提問,AI 會根據文章內容回答。按 Ctrl+Enter 送出。