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请求检测。

image.png

P4H{3N3JRF09AYF({_0AUVD.png

尝试自编译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的监测。后续查看是否依旧存在此问题(如果解决了,会来自回答)

阅读 1.5k
1 个回答

经过几小时的运行,新进程一就出现了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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题