gperftools如何在引擎盖下工作?

时间:2015-06-17 23:48:41

标签: google-perftools gperftools pprof

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

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

除了概述之外,以下是我想回答的一些具体问题:

  • gperftools是" event based profiler"或" instrumentation profiler"。根据我的理解,这些分析器会修改程序的运行方式并通过这些修改来收集样本
  • 在什么级别'在OS中做gperftools配置文件?它是否会像SystemTapperf
  • 那样分析内核
  • gperftools在高流量生产服务器上运行是否安全?

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

1 个答案:

答案 0 :(得分:5)

这是一个抽样分析器。

基本上,有两种类型的分析:要么跟踪程序所做的一切(保持每个调用的计数,将每个函数包装在一个计时器中,换句话说,用你的乐器渗透代码),否则你让它会自行运行但只是偶尔检查一下(取样)。

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

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

相关问题