一直显示?点击任意区域即可关闭
本文发表于 745 天前,其中的信息可能已经事过境迁

解决方法

检查 for select 代码中是否有 default 语句,并且在 default 分支上检查是否为空或者没有等待相关的逻辑,如果是的话则会导致 for 循环会在极短时间内不断地执行,导致CPU占用过高。

示例

go
for {
    select {
    case <-timer.C:
        fmt.Println("todo")
    default: // 注释default或者加上等待问题将会解决
        // 如果没有相关等待,default分支逻辑将会在for循环一直执行
        if someParam == someValue {
            // some logic
        }
    }
}

起因

最近同事在使用开发的项目的时候,使用某个功能,打开docker stats查看占用发现在100%

2024-08-08T05:26:42.png2024-08-08T05:26:42.png

使用火焰图分析发现是 select 占比非常高,于是就查看相关代码以及搜集资料解决

2024-08-08T05:28:10.png2024-08-08T05:28:10.png

深入分析

(待补充)

相关推荐随便逛逛
Go语言进阶Re0 Go语言源代码
评论

暂无评论,欢迎留下第一条评论。