首先我们需要通过*1链接了解到TCP连接过程中的四个状态,其中就有介绍CLOSE_WAIT这一连接状态。
我遇到的是这样一个场景:使用本地机作为服务器向消费端提供开放api,技术上使用python的tornado框架搭建api服务,同时服务端需要调用第三方数据,导致两个结果
1、前端一直请求不关闭;
2、其它部分接口失效
1、导致第一个问题的直接原因是服务器产生一个CLOSE_WAIT,所以api服务始终不给前端响应。照理说产生一个僵死链接只是会占用资源,为什么会阻塞住整个api服务呢?阻塞的原因是端口占用还是进程阻塞?这个有待进一步研究。
2、导致第二个问题的原因就是产生CLOSE_WAIT的原因,服务端在mysql事务内调用第三方接口,由于第三方接口无反应或者网络不稳定而中端则导致TCP链接产生CLOSE_WAIT,最终事务不提交表被锁死,而相关表资源调用的接口失效。
解决方法就是给第三方请求加一个超时设置。
大家知道我写文章向来这么精简,拜拜。