python使用aiohttp构建了一个web-api,使用uptimerobot进行状态监测的时候,出现了大量CLOSE-WAIT状态的链接,如何解决?
如题,我想知道如何解决这个问题。百度了很久,都么有找到aiohttp有关socket关闭的写法。而nginx似乎默认状态下也不能处理CLOSE-WAIT状态。
api的代码见 https://gitee.com/musnow/Kook-Valorant-Bot/blob/develop/code/...
netstat -ntp
的结果如下图,大量来源自cf的ip,只能是uptimerobot的HEAD请求检测。
尝试自编译nginx并添加github.com/zhouchangxun/ngx_healthcheck_module
,不知道如何配置自编译nginx的ssl,已有配置文件报错,以失败告终。现在(和之前)使用的nginx是yum直接安装的。所用系统为CentOS 7.6
yum install -y nginx
救救孩子吧,已经折腾了3h了
感谢@ssseerr999 我发现我完全理解错了,这个请求似乎是本地导致的,并不是uptimerobot的?检查了之后,估计是本地调用riot-api的时候,没有对结果进行close。uptimerobot和riot的api都套了cf,让我误以为是uptimerobot导致的?
已经修改了请求riot-api的代码,添加了close,并维持uptimerobot的监测。后续查看是否依旧存在此问题(如果解决了,会来自回答)
回答:
经过几小时的运行,新进程一就出现了CLOSE-WAIT,可见我新增的close并没有起实际作用(我是在__del__()
里面加上的)。于是就发现了下面这个requests库的issue:
https://github.com/psf/requests/issues/1973
和一个相关的issue
https://github.com/dongweiming/wechat-admin/issues/43
原来这个是request库的设计导致的,request采用了连接池,会在后续复用已有的链接。
具体的原因解释可以参考这篇文章 https://zhuanlan.zhihu.com/p/497922674
以上是 python使用aiohttp构建了一个web-api,使用uptimerobot进行状态监测的时候,出现了大量CLOSE-WAIT状态的链接,如何解决? 的全部内容, 来源链接: utcz.com/p/938795.html