使用https://github.com/vimeo/statsdaemon的cpu配置文件运行go tool pprof
并输入“ web ”我获得了一个svg配置文件,其中广泛使用了“ runtime.futex ”。但我无法看到它的来源,只是说“ System ”。
我想知道我的程序调用哪些代码,导致runtime.futex
花费了大量时间。
为了确保我通过了'-nodefraction=0'
,这使得它不会在网页svg视图中删除节点,尽管它说“显示246中的前80个节点(cum> = 0.11s)“,也许这是相关的。
我尝试了https://code.google.com/p/gperftools/并且显示了相同的内容。 viz没有删除任何节点或边缘,但仍然“runtime.futex”只显示在“ System ”下,那是根节点?
答案 0 :(得分:4)
futex或“Fast user space mutex”是用于基本锁定的linux系统调用。我认为go运行时会在引擎盖下使用它。
在没有看到某些代码的情况下,很难确定,但对于使用通道进行大量协调的高度并发代码,futex调用可能来自系统并且没有特定功能。
答案 1 :(得分:0)
遇到此类问题时,我使用了runtime/trace
,其中看到一些函数经常被调用,而该函数通过
ticker := time.NewTicker()
但不能通过
阻止它 defer ticker.Stop()