症状和影响

外部表现为,高并发的最后一批请求的所有套接字失去响应(例如并发池为8,共100个请求,最后7~9个连接全部没有响应)
这些连接不会eof也不会关闭,链接也不断开,也不会引发任何异常。

原因

高并发情况下,垃圾回收自动把协程对象回收,导致await关键字永久等待。

解决方案

  • PlanA:
    绝对不要在协程中进行手动gc.collect(),这会导致正在等待的协程被释放。

  • PlanB:
    关闭自动gc;对当前连接数进行计算,当连接数为0时阻塞,并手动进行垃圾回收