最近经常发送frp搭建外网访问内网不稳定,经过多次排查发现一个可怕的漏洞:这些 goroutines 结束之前正在等待一个 channel 关闭,而这个 channel 永远不会关闭(一个常见的死锁问题)。这个进程毫无任何理由吃掉了 90 % 的 CPU ,而检查 expvars 显示有 600 k 空闲的 goroutines! 我猜测 goroutine 调度程序占用了 CPU。channels 没有仔细考虑,因为错误大小的 channels (默认情况下没有缓冲) 会导致死锁。