使用https://github.com/vimeo/statsdaemon的cpu profile运行go tool pprof
并输入"web“,我得到了一个广泛使用"runtime.futex”的svg profile。但我看不出它是从哪里来的,它只写着“系统”。
我想知道我的程序调用了哪些代码,这导致了在runtime.futex
上花费了这么多时间。
可以肯定的是,我通过了'-nodefraction=0'
,这使得它不会在web视图中删除节点,尽管它显示“显示246个节点中的前80个(cum >= 0.11s)",但这可能是相关的。
我尝试过https://code.google.com/p/gperftools/,它显示的是相同的内容。viz没有丢弃任何节点或边,但"runtime.futex“仍然显示在"System”下,这就是根节点?
发布于 2015-04-27 11:26:26
futex或“快速用户空间互斥锁”是用于基本锁定的linux系统调用。我想go运行时会在幕后使用它。
如果看不到一些代码,就很难确定,但对于使用通道进行大量协调的高并发代码,futex调用可能真的来自系统,而不是特定的函数。
发布于 2019-12-09 12:38:56
当我遇到这样的问题时,我使用了runtime/trace
,我发现一些函数经常被调用,这个函数通过以下方式创建新的滚动条
ticker := time.NewTicker()
但不会阻止它
defer ticker.Stop()
另外,也不要忘记停止计时器:
timer := time.NewTimer(duration)
defer timer.Stop()
https://stackoverflow.com/questions/29885199
复制相似问题