Gperftools如何在引擎盖下工作?

我正在寻找关于Gperftools如何工作的简单解释。 到目前为止,这是我所了解到的:

  • 它运行一个停止世界的采样器。 换句话说,它会定期停止正在分析收集信息的程序。
  • Golang的pprof库在下面使用了gperftools。
  • 除了一般概述,以下是我想要回答的一些具体问题:

  • Gperftools是“基于事件的分析器”还是“仪器分析器”。 据我所知,这些分析器修改程序运行的方式并通过这些修改收集样本
  • 在操作系统的哪个“级别”上,gperftools配置文件? 它是否像SystemTap或perf这样描绘内核?
  • Gperftools是否安全地在高流量的生产服务器上运行?
  • 我在问这个问题,以推断在Go服务器上使用pprof引入的开销。


    它是一个采样分析器。

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

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

    通过运行strace,您可以看到Google-perftools使用SIGPROF信号(HPCToolkit和Open | SpeedShop)。 据推测,它只是设置一个事件处理程序,然后在内存中徘徊,而不消耗任何CPU周期,直到硬件/操作系统中断您的程序(可能很少出现您喜欢的程序),然后推测它只会保存一份调用堆栈(并计划下一个中断),然后再让控制权返回到您的程序。 调用堆栈列出了程序的功能(以及哪个父功能调用了该功能,因此,“return”语句的工作原理是什么..)。

    链接地址: http://www.djcxy.com/p/87955.html

    上一篇: How does gperftools work under the hood?

    下一篇: profiling C code