
字节笔记本
2026年10月9日 · 约 5 分钟读完
别等 Worker 撞上内存上限再猜哪段热
线上 Worker 吃满 128 MB 才知道哪段热,本地复现又对不上流量。Cloudflare 在 2026-10-09 的博客 Introducing on-demand CPU and memory profiling 给 Workers 和 Durable Objects 加了按需采样,结果直接画成生产火焰图。争论从“再加一台日志机”变成“对着线上版本采五秒”。
入口有三条:命令行、控制台、HTTP API。命令行写成 cf workers versions profile latest,要带 worker 标识、duration-ms(示例 5000)和 profile-type(cpu 或 memory),输出 pprof。控制台路径是 Build → Compute → Workers & Pages → 选中 Worker → Observability → Flamegraph。API 是对账户下该 Worker 的 versions/latest/profile 发 POST,正文 duration_ms 和 profile_type。本轮没有代跑。元数据把发布时间写成 2026-10-09T13:00:00.000Z。同日还有 Deno 并入公告,那是运行时归属,观测能力单独成篇。

先采五秒,再谈持续
CPU 采样间隔写成 1 毫秒。隔离锁只在开始和结束时拿,采样过程不一直锁死。Durable Objects 可以按名字指定实例,请求会落到那台金属上。TypeScript 项目要打开 source maps,否则函数名是混淆过的。内存视图只覆盖这一段捕获窗口,启动阶段看不到。会话只在有请求时开始,空闲窗口会漏事件。博客写持续画像还在做,现在不是自动常开。要先有已经在跑、正在接请求的隔离,冷启动的空脚本点下去会空。
文里有一个对照:某 Worker 修前 P999 到 133 MB,撞上 128 MB 上限;火焰图用来对准热点。这是官方例子,不是本轮复现。仓库侧,Wrangler 所在的 cloudflare/workers-sdk 本轮 4612 星、1579 个 fork,许可证 Apache-2.0,创建 2021-11-10,最近推送 2026-10-09。运行时仍是 cloudflare/workerd,8837 星、774 个 fork、Apache-2.0。这篇不讲 Deno 并入,只讲观测入口。队列里的 agentic 安全运营稿是 Managed Defense 的多 agent harness,和火焰图不是同一件事。

今天怎么接到这条命令
博客给的命令行示例是把 cpu 档案重定向成 pprof。worker 标识用环境变量占位,不要把账户密钥写进仓库。
cf workers versions profile latest \
--worker-id "$WORKER_ID_OR_NAME" \
--duration-ms 5000 \
--profile-type cpu > worker-cpu.pprofAPI 示例是对 https://api.cloudflare.com/client/v4/accounts/<account_id>/workers/workers/<worker_name>/versions/latest/profile 发 JSON:{"duration_ms":5000,"profile_type":"cpu"}。本轮不代填账户。控制台要先有线上流量,空 Worker 点火焰图采不到。profile_type 目前文档示例是 cpu 或 memory,不要自行发明第三种。duration 示例是 5000 毫秒,博客没有把上限写成强制值,本轮也不编一个上限。
读这篇记住四组约束。一,采的是已经在跑、有请求的隔离。二,锁只在起停,采样间隔 1 毫秒。三,内存窗不含启动,空闲会漏事件。四,持续画像还没到,不要当成常开 profiler。站内刚写过 Deno 并入和自托管 workerd,那是运行时归属。这篇是同一天的观测能力,可以并排,不要并成一篇。Workers 旧稿里的 Web Search API、Stream 管线也不并进来。Hacker News 今日仍把 Deno 加盟放在首页,火焰图没有单独上榜,热度以官方博文为准。Anthropic 今日头条仍是政策和品牌,没有 Claude Code 新动作。Latent Space 仍是 Haiku 日报。这些都不并进这篇。PE 最新一期仍是内部 vibe-coding 平台化,也不并进。



