跳转到内容
搜索文档

分析 CPU 使用情况

最后更新 查看 MarkdownAgent 设置

如果 Worker 在 CPU 密集型任务上花费过多时间,响应可能会变慢,或者 Worker 可能因启动时间限制而无法启动。

在 DevTools 中进行性能分析可以帮助您识别并修复占用过多 CPU 的代码。

在生产环境中测量特定函数的执行时间可能比较困难,因为出于安全考虑,Workers 仅在 I/O 时递增计时器。但在本地开发中使用 DevTools 可以测量 CPU 执行时间。

使用 DevTools 监控 CPU 使用情况时,可能难以复现生产环境中观察到的特定行为。要模拟生产行为,请确保发送到本地 Worker 的请求与生产环境中的请求相似。这可能意味着发送大量请求、向特定路由发送请求,或通过远程绑定(remote bindings)使用类似生产环境的数据。

采集性能分析数据

要生成 CPU 性能分析:

  • 运行 wrangler dev 启动 Worker
  • 在终端中按 D 键打开 DevTools
  • 选择 Profiler(性能分析器) 标签页
  • 选择 Start 开始记录 CPU 使用情况
  • 在新标签页中向 Worker 发送请求
  • 选择 Stop

您现在拥有 CPU 性能分析数据。

性能分析示例

让我们通过一个示例学习如何阅读 CPU 性能分析。假设您有以下 Worker:

index.jsjs
const addNumbers = (body) => {
	for (let i = 0; i < 5000; ++i) {
		body = body + " " + i;
	}
	return body;
};

const moreAddition = (body) => {
	for (let i = 5001; i < 15000; ++i) {
		body = body + " " + i;
	}
	return body;
};

export default {
	async fetch(request, env, ctx) {
		let body = "Hello Profiler! - ";
		body = addNumbers(body);
		body = moreAddition(body);
		return new Response(body);
	},
};

您想找出代码的哪一部分导致响应时间变慢。如何使用 DevTools 性能分析来识别 CPU 密集型代码并修复问题?

首先,如上所述,运行 wrangler dev 后按 D 键打开 DevTools。然后,导航到 "Profiler" 标签页,按 Start 并发送请求来采集性能分析数据。

CPU 性能分析

此图像顶部的图表显示性能分析的时间线,您可以用它放大查看特定请求。

下方图表显示请求执行期间各操作使用的 CPU 时间。在此截图中,您可以在顶部看到 "fetch" 时间,下方是其子组件,包括 addNumbersmoreAdditions 两个函数。将鼠标悬停在每个方框上可获取更多信息,点击方框可导航到函数的源代码。

使用此图表,您可以回答"什么占用了 CPU 时间?"的问题。addNumbers 函数的方框很小,代表 0.3ms 的 CPU 时间。moreAdditions 方框较大,代表 2.2ms 的 CPU 时间。

因此,如果您想加快响应速度,需要优化 moreAdditions

您还可以将可视化从「Chart」切换为「Heavy (Bottom Up)」以获得另一种视图。

CPU 性能分析

这显示了各函数分配时间的相对比例。列表顶部,moreAdditions 显然是 Worker 中最慢的部分。您还可以看到垃圾回收也占用了大量时间,因此内存优化也可能有所帮助。

其他资源

要了解如何使用 CPU 分析器,请参阅 Google 关于在 DevTools 中分析 CPU 的文档

要了解如何使用 DevTools 洞察内存使用情况,请参阅内存使用文档

这篇文档对您有帮助吗?