You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

高QPS CPU密集型服务如何获取goroutine平均调度等待时间

Go goroutine调度等待时长获取方案

针对CPU密集型高QPS服务的goroutine调度监控需求,可通过以下3种方式获取goroutine从runnable状态到被调度执行的平均等待时长:

  • 利用你已采集的trace文件直接分析
    执行go tool trace [trace文件路径]启动分析页面,选择「Goroutine analysis」功能项,可查看所有goroutine的生命周期耗时明细,包含调度等待时长、执行时长、IO阻塞时长等字段,可直接统计得出平均调度等待时长,还可筛选出等待超时的异常goroutine。
  • 通过block profile采集调度阻塞数据
    在代码中调用runtime.SetBlockProfileRate(1)开启全量阻塞事件采样,采集完成后生成block profile文件,用go tool pprof分析时,调度等待耗时会归类到sched_latency统计项中,可直接提取数据计算平均值。
  • 线上服务可直接读取内置runtime metrics(Go 1.19及以上版本支持)
    官方内置了调度延迟直方图指标/sched/latencies:seconds,该指标统计了所有goroutine进入runnable队列后到被调度执行的耗时分布,可直接读取该指标计算平均值、P99等分位值,无需额外采集trace或profile,适合线上实时监控场景。

补充说明:如果trace图中的runnable goroutine数量长期大于你设置的GOMAXPROCS值,说明CPU资源已经饱和,调度等待耗时必然会上升,可结合计算出来的等待时长判断是否需要优化计算逻辑、调整并发度或者扩容实例。

内容的提问来源于stack exchange,提问作者jeremie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:27:05