原文地址:https://zhuanlan.zhihu.com/p/22474724 作者的结论没写好,我来说两句.. 结论: Docker swarm自己有个函数,叫setTcpUserTimeout,这个函数调用了conn.File()方法,将tcp的fd变成了blocking,而且没有关闭对应的fd.相当于每次设定tcpUserTimeout参数,再去read一下fd,都会产生一个新的线程.因为老的线程在读fd,而fd被设置成blocking了,于是golang的运行时只好再开一个新的.…