流程在select.go上花费了太多时间进行阻塞,而没有明确的相应操作

时间:2019-08-28 11:26:56

标签: go optimization benchmarking goroutine flamegraph

我正在尝试找出程序的瓶颈。根据基准测试结果,该进程在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 

flamegraph of blocking

我想知道这笔费用的可能原因或分析这笔费用的原因的方法。

0 个答案:

没有答案