如何查看runtime.futex的来源?它只有“系统”作为父级

时间:2015-04-27 00:11:08

标签: go profiling

使用https://github.com/vimeo/statsdaemon的cpu配置文件运行go tool pprof并输入“ web ”我获得了一个svg配置文件,其中广泛使用了“ runtime.futex ”。但我无法看到它的来源,只是说“ System ”。

我想知道我的程序调用哪些代码,导致runtime.futex花费了大量时间。

profile screenshot

为了确保我通过了'-nodefraction=0',这使得它不会在网页svg视图中删除节点,尽管它说“显示246中的前80个节点(cum> = 0.11s)“,也许这是相关的。

我尝试了https://code.google.com/p/gperftools/并且显示了相同的内容。 viz没有删除任何节点或边缘,但仍然“runtime.futex”只显示在“ System ”下,那是根节点?

2 个答案:

答案 0 :(得分:4)

futex或“Fast user space mutex”是用于基本锁定的linux系统调用。我认为go运行时会在引擎盖下使用它。

在没有看到某些代码的情况下,很难确定,但对于使用通道进行大量协调的高度并发代码,futex调用可能来自系统并且没有特定功能。

答案 1 :(得分:0)

遇到此类问题时,我使用了runtime/trace,其中看到一些函数经常被调用,而该函数通过

创建新的代码

ticker := time.NewTicker()

但不能通过

阻止它

defer ticker.Stop()