Google Cloud Profiling 如何通过分析优化我的代码?

Posted

技术标签:

【中文标题】Google Cloud Profiling 如何通过分析优化我的代码?【英文标题】:Google Cloud Profiling how to optimize my code by analyzing it? 【发布时间】:2018-04-04 19:18:59 【问题描述】:

我正在尝试分析Google CLoud Stackdriver's Profiling,现在谁能告诉我如何使用它优化我的代码

另外,我看不到任何函数名,我不知道这是什么_tickCallback 以及它正在执行的代码的哪一部分??

请帮助我,任何人。

【问题讨论】:

这是堆(内存)还是 CPU 配置文件? process._tickCallback 只是一个内部节点函数。不用担心。 当您将鼠标悬停在栏上时,您是否获得完整的函数名和文件名?另外,能发完整图吗?这个在右边似乎被截断了。谢谢! @user835611 这是Heap 分析。 @user835611 当我将鼠标悬停在上面时,我会得到size(使用百分比)和我悬停在上面的相同名称。 @user835611 实际上它并没有向右截断,它是从底部裁剪的,因为图形垂直大。 【参考方案1】:

查看 node.js 堆配置文件时,我发现了解代码是否繁忙并分配内存(即 Web 服务器是否有负载?)非常有帮助。

这是因为堆分析器会在收集配置文件时对堆中的所有内容进行快照,包括不再使用但尚未被垃圾收集的分配。

如果代码不分配内存,垃圾收集不会经常发生。因此,当代码不是很忙时,堆配置文件会显示大量内存分配,这些分配在堆中但不再真正使用。

看看你的火焰图,我猜你的代码不是很忙(或者没有分配很多内存),所以来自分析器的内存分配支配了堆配置文件。如果您的代码是一个 Web 服务器,并且在它没有负载时对其进行了分析,那么在分析时为它生成负载可能会有所帮助。

【讨论】:

此外,忽略(使用控制栏中的 filter: 选项)配置文件会有所帮助,因为这是分析器代理本身正在运行。这扩展了 mn573 的答案,因为代理不应该在资源方面使用太多,因此在低负载时它会主导配置文件。 如果你使用 typescript 另一个可能的挑战——分析代理不支持源映射,所以函数名称将是从 typescript 编译的 javascript 中的函数名称,而不是打字稿功能。【参考方案2】:

回答第二个问题:_tickCallback 是一个 Node.js 内部函数,用于在计时器上运行事物。例如,如果有任何东西正在使用 setTimeout。在计时器上安排的任何内容都会在堆栈底部具有 _tickCallback。

在图片的其他地方,您可以在堆栈上看到一些绿色和青色的“结束”函数。我怀疑这些是您在快速请求处理程序中调用 response.end 的地方。

【讨论】:

以上是关于Google Cloud Profiling 如何通过分析优化我的代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google PubSub 确认 (@google-cloud/pubsub)

如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?

google-cloud-recommendations 如何识别 UserEvent 是不是被删除?

如何从 google.cloud 导入 bigquery 模块

如何访问 Python google.cloud.storage 上传方法中的错误原因?

如何将 google-api-client 用于 Google Cloud Logging