我试图找出我的程序的瓶颈。根据基准测试结果,该进程在 runtime/select.go 的第 485 行被阻塞了相当长的时间,这是由 http.(*persistConn).writeLoop 引起的,但我不知道根本原因。
我试图分析我程序中的http操作。但是根据火焰图,我由几个 goroutine 并行执行的 url 获取操作并没有成为一个重大负担。我也没有在我的程序中使用“选择”
这是“源”视图中的 pprof 输出:
runtime.selectgo
/usr/lib/golang/src/runtime/select.go
Total: 2.75mins 2.75mins (flat, cum) 79.42%
480 . . }
481 . . goto retc
482 . .
483 . . retc:
484 . . if cas.releasetime > 0 {
485 2.75mins 2.75mins blockevent(cas.releasetime-t0, 1)
486 . . }
487 . . return casi, recvOK
488 . .
489 . . sclose:
490 . . // send on closed channel
我想知道这个成本的可能原因或分析这个成本原因的方法。