在生产环境中使用Golang pprof会不会影响性能?

10

我对 pprof 工具不是很了解,想知道在生产环境中运行它是否安全。从我看到的文章来看,似乎这样做是可以的且标准的,但我不明白每秒进行 N 次采样为什么不会影响性能,也不会导致性能下降。


1
如果您想要监控,请使用监控系统而不是pprof;pprof适用于需要跟踪某些问题和调试的情况。 - Shubham Srivastava
1个回答

13

Jaana Dogan在她的文章“持续对Go程序进行剖析”中说:

在生产环境中进行剖析

pprof在生产环境中使用是安全的
我们针对CPU和堆分配剖析额外增加了5%的开销

每分钟从单个实例进行10秒钟的采集。如果您有Kubernetes pod的多个副本,我们会确保进行摊销收集。
例如,如果您有10个pod的副本,则开销将为0.5%。这使用户可以始终保持剖析状态。

我们目前支持Go程序的CPU、堆、互斥锁和线程剖析。

为什么?

在解释如何在生产环境中使用剖析器之前,解释为什么要在生产环境中进行剖析会很有帮助。一些非常常见的情况包括:

  • 仅在生产环境中看到的性能问题。
  • 了解CPU使用情况以减少计费。
  • 了解争用累积的位置并进行优化。
  • 了解新版本的影响,例如查看金丝雀和生产之间的差异。
  • 通过将剖析样本与分布式跟踪相关联来丰富跟踪,以了解延迟的根本原因。

因此,如果您出于正确的原因使用pprof,则可以在生产环境中保留它。
但是对于基本监视,正如评论中所述,系统已足够。

正如Vladimir Varankin在“持续剖析和Go”中所指出的那样:

根据公司基础设施的状态,应用程序进程中的“意外”HTTP服务器可能会引起系统操作部门的问题;)

同时,根据公司的特殊性质,能够访问与应用程序业务逻辑无直接关系的生产应用程序中的某些内容可能会引起安全部门的问题;)

因此,在保留此功能时,开销并不是唯一要考虑的标准。


这篇文章讨论了AWS每分钟轮询pprof。这就是产生5%开销的原因所在。这并不意味着一个空闲的pprof就有那么多开销。 - rustyx
@rustyx 同意。我看到了你在 https://dev59.com/Dl8d5IYBdhLWcg3wsT4b#26546682 上的评论(尽管该评论是2014年的)。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接