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

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

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

请帮助我,任何人。

【问题讨论】:

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

标签: node.js google-app-engine google-cloud-platform stackdriver google-cloud-profiler


【解决方案1】:

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

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

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

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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多