采样型剖析器
采样型剖析器通过周期性地抓取程序当前调用栈的快照,以及检查当前调用的函数的方式来检查程序状态。这里的思想是被采样最多的函数即是占用程序执行时间最多的函数。在一个时间较长的运行过程中,被采样最多的函数可以推定执行时间最多的函数,从而可以得到最常被执行函数的大致图像。
这类剖析器的第一个缺点是显而易见的——即它的统计本质。对不常使用的函数的采样结果可能是不精确的;函数有可能被漏采样,当剖析器运行过快时也有可能被误采样。第二个缺点更加微妙——对系统中每个函数一视同仁的数据采样方式会导致数据泛滥,而我们知道,通常只有小部分的代码于性能息息相关。
虽然这类剖析器的缺陷显而易见,但它们本质上是一种非侵入式的检测技术。由于它们独立于构建工具链,这类剖析器非常易于使用并且在目前的软件开发中被广泛使用。这类剖析器包括Visual Studio profiler, Very Sleepy, 及Luke Stackwalker等等,不一而足。有些年头的gprof也可以看作是一种检测式和采样式混合型剖析器。
实际情况下,你可能需要同时使用两种剖析器:在剖析构建或了解大概的整体情况时使用手动检测型剖析器,而在调查具体问题时,使用采样型剖析器获取进一步的细节数据。
网友评论