本文发表于 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.png
使用火焰图分析发现是 select 占比非常高,于是就查看相关代码以及搜集资料解决
2024-08-08T05:28:10.png
深入分析
(待补充)
Golang for select 导致 CPU 100% 占用https://blog.xingyu.lu/archives/112.html
暂无评论,欢迎留下第一条评论。