线上一个服务有个严重问题,处理消息数1k/s提升不上去,经过查看是阻塞在了一个新加的函数上,这个函数负责收集信息,送到一个channel上,再由某个函数处理,这个处理函数很简单,看不出任何问题,最大的特点是为了不加锁,只起一个goroutine. 结论很明显了,只起一个goroutine,当系统繁忙和存在大量goroutine的时候,会得不到调度,导致收集函数阻塞,进而导致消息处理数上不去. 该获得调度的没有被调度,不该获得调度的却获得调度了,而go runtime不可能知道那个goroutin…