7

我正在寻找gperftools如何工作的简单解释。到目前为止,这是我学到的:

  • 它运行一个停止世界的采样器。换句话说,它会定期停止正在分析的程序以收集信息。
  • Golang 的 pprof 库在下面使用 gperftools。

除了一般概述之外,还有一些我想回答的具体问题:

  • gperftools 是“基于事件的分析器”还是“检测分析器”。据我了解,这些分析器通过这些修改修改程序运行和收集样本的方式
  • gperftools 配置文件在操作系统的哪个“级别”?它是否像SystemTapperf那样分析内核?
  • gperftools 在高流量生产服务器上运行是否安全?

我问这个问题是为了解释在 Go 服务器上使用 pprof 引入的开销。

4

1 回答 1

5

它是一个采样分析器。

基本上,有两种类型的分析:要么跟踪程序所做的一切(记录每次调用的计数,将每个函数包装在计时器中,换句话说,用你的仪器渗透代码)或者让它自己运行但只是不时地检查一下(取样)。

仪表的问题在于它改变了程序的执行方式。它会减慢程序的速度,同时也会扭曲结果。(例如,生产代码可能会花费太多时间等待 IO,但插桩代码可能不会表现出这一点。)它还收集了远远超过统计所需的数据(如果最终你关心的是确定大部分时间在哪里花费)。

通过运行 strace,您可以看到 Google-perftools 使用 SIGPROF 信号工作(HPCToolkit 和 Open|SpeedShop 也是如此)。大概它只是设置了一个事件处理程序,然后在内存中徘徊,不消耗任何 CPU 周期,直到硬件/操作系统中断您的程序(这可以像您喜欢的那样不频繁),然后大概它只是保存调用堆栈的副本(并安排下一次中断),然后让控制权返回您的程序。调用堆栈列出了您的程序正在执行的函数(以及哪个父函数调用了该函数,等等,这就是“返回”语句的工作方式......)。

于 2015-07-11T03:13:38.183 回答