go tool pprof使用https://github.com/vimeo/statsdaemon的cpu配置文件运行并键入“ web ”,我得到了一个广泛使用“ runtime.futex ” 的svg配置文件。但是我看不到它的来源,它只是说“ 系统 ”。
我想知道我的程序调用哪个代码,这导致花了太多时间runtime.futex。

为了确保我通过'-nodefraction=0',这不会使它不在web svg视图中删除节点,尽管它说“ 显示246个中的前80个节点(暨> = 0.11s) ”,也许这是相关的。
我尝试了https://code.google.com/p/gperftools/,它显示了相同的内容。可视化没有丢弃任何节点或边缘,但是“ runtime.futex”仍然显示在“ 系统 ”下,这是根节点吗?
futex或“快速用户空间互斥体”是用于基本锁定的linux系统调用。我想象go运行时会在后台使用它很多。
没有看到一些代码就很难确定,但是对于高度并发的代码以及使用通道进行大量协调的情况,futex调用实际上可能来自System,而没有特定的功能。
当我遇到这样的问题时,我使用过runtime/trace经常调用某个函数的地方,并且该函数通过以下方式创建了新的股票代码
ticker := time.NewTicker()
Run Code Online (Sandbox Code Playgroud)
但并没有阻止它
defer ticker.Stop()
Run Code Online (Sandbox Code Playgroud)
另外,不要忘记停止计时器:
timer := time.NewTimer(duration)
defer timer.Stop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |