我对 pprof
工具不是很了解,想知道在生产环境中运行它是否安全。从我看到的文章来看,似乎这样做是可以的且标准的,但我不明白每秒进行 N
次采样为什么不会影响性能,也不会导致性能下降。
Jaana Dogan在她的文章“持续对Go程序进行剖析”中说:
在生产环境中进行剖析
pprof在生产环境中使用是安全的。
我们针对CPU和堆分配剖析额外增加了5%的开销。每分钟从单个实例进行10秒钟的采集。如果您有Kubernetes pod的多个副本,我们会确保进行摊销收集。
例如,如果您有10个pod的副本,则开销将为0.5%。这使用户可以始终保持剖析状态。我们目前支持Go程序的CPU、堆、互斥锁和线程剖析。
为什么?
在解释如何在生产环境中使用剖析器之前,解释为什么要在生产环境中进行剖析会很有帮助。一些非常常见的情况包括:
- 仅在生产环境中看到的性能问题。
- 了解CPU使用情况以减少计费。
- 了解争用累积的位置并进行优化。
- 了解新版本的影响,例如查看金丝雀和生产之间的差异。
- 通过将剖析样本与分布式跟踪相关联来丰富跟踪,以了解延迟的根本原因。
因此,如果您出于正确的原因使用pprof
,则可以在生产环境中保留它。
但是对于基本监视,正如评论中所述,系统已足够。
正如Vladimir Varankin在“持续剖析和Go”中所指出的那样:
根据公司基础设施的状态,应用程序进程中的“意外”HTTP服务器可能会引起系统操作部门的问题;)
同时,根据公司的特殊性质,能够访问与应用程序业务逻辑无直接关系的生产应用程序中的某些内容可能会引起安全部门的问题;)
因此,在保留此功能时,开销并不是唯一要考虑的标准。