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 模块