是否可以在生产中使用golang pprof而不影响性能? 为什么?

问题描述

我是pprof工具的新手,并且想知道是否可以继续在生产环境中运行它。从我所看到的文章来看,这似乎还可以,而且很标准,但是我对这不会影响性能感到困惑,因为它每秒进行一次N次采样,而这又不会导致性能下降。

解决方法

Jaana Dogan确实在她的文章“ Continuous Profiling of Go programs”中说过

生产中的配置文件

pprof在生产中可以安全使用
我们的目标是为CPU和堆分配分析提供5%的额外开销

从单个实例开始,收集每分钟发生10秒。如果您有一个Kubernetes窗格的多个副本,请确保我们进行了摊销集合。
例如,如果您有一个Pod的10个副本,则开销将为0.5%。这使用户可以始终保持概要分析。

我们目前支持Go程序的CPU,堆,互斥和线程配置文件。

为什么?

在解释如何在生产中使用概要分析器之前,先解释一下为什么要在生产中进行概要分析将很有帮助。一些非常常见的情况是:

  • 调试性能问题仅在生产环境中可见。
  • 了解CPU使用率以减少计费。
  • 了解竞争在哪里累积和优化。
  • 了解新版本的影响,例如看到金丝雀和生产之间的区别。
  • 通过将分布的踪迹与概要分析样本相关联来丰富它们,从而了解延迟的根本原因。

因此,如果出于正确的原因使用pprof,是的,可以将其投入生产。
但是对于基本监视来说,该系统就足够了。

Continuous Profiling and Go在“ Vladimir Varankin”中指出

根据公司基础架构的状态,应用程序流程中的“意外” HTTP服务器可能会引起系统运营部门的疑问;)

同时,根据公司的特殊性质,访问生产应用程序内部内容的能力(与应用程序的业务逻辑不直接相关)会引起安全部门的疑问;))

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...