一个非常奇怪的问题, supervisord 启动的用 aiohttp 发请求的爬虫同时发 10 万请求的情况下有大约 30%的请求会无法解析域名,而在 bash 中手动运行则没有这个问题, Google 上没找到一个类似情况的

2022-11-21 12:18:45 +08:00
 edis0n0

这是 supervisor 的配置:

[program:watchdog]
command=python3.9 /app/watchdog/wd.py
directory=/app/watchdog/
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/watchdog.log
loglevel=info
startsecs = 20

程序的代码涉及比较复杂的业务逻辑暂时没办法发出来。

有什么办法排查吗?

2714 次点击
所在节点    Python
17 条回复
eason1874
2022-11-21 12:25:00 +08:00
盲猜 DNS 缓存问题,bash 环境有缓存,而 aiohttp 没有缓存
pcbl
2022-11-21 12:28:15 +08:00
类似的毛病我遇到过自己排查分析了好几天才搞定

楼主试着把 supervisor 中文件打开数限制调大应该可以解决。
edis0n0
2022-11-21 12:29:03 +08:00
@eason1874 #1 bash 还能缓存 python 脚本解析的域名吗?是在 bash 中手动用 python3.9 命令运行同一个脚本,一点问题都没有,supervisor 运行的 python3.9 5 分钟就几十万条报错
guanzhangzhang
2022-11-21 12:31:36 +08:00
systemd 的 limit file 和 supervisor 你的 program 的 file open 啥的都加大一些试试
edis0n0
2022-11-21 12:32:36 +08:00
@pcbl #2 真的是这问题,解决了,牛逼
edis0n0
2022-11-21 12:33:06 +08:00
就加了一行 minfds = 655350 然后重启 supervisor 服务
edis0n0
2022-11-21 12:33:35 +08:00
昨天排查了一整天都没解决
liuzhedash
2022-11-21 12:37:20 +08:00
@guanzhangzhang
细说下其中道理?
我和 1 楼猜的是一样的,但是看起来并不是缓存的问题。
guanzhangzhang
2022-11-21 12:40:09 +08:00
@liuzhedash supervisor 这种肯定不会缓存的,因为 dns 缓存都是 glibc 或者 java 的 runtime 有参数决定的,手动 run 没问题,放 supervisor 纳管就有问题明显就是 fd 相关的。例如很多小白 mysql 用 systemd 纳管,写了个很简单的 systemd.service 文件,systemd 的默认 fd 是 4096 ,会导致 mysql 效率不行
edis0n0
2022-11-21 12:43:03 +08:00
@guanzhangzhang #9 手动 run 的话有缓存吗?直接改 fd 让程序跑起来会不会影响性能?
edis0n0
2022-11-21 12:43:58 +08:00
我们没有专业运维搞不定,数据库用的都是各大云厂商的云数据库服务
guanzhangzhang
2022-11-21 12:44:18 +08:00
@edis0n0 你可以搜下 关于 limits 生效的四个案例 ,用户和纳管的进程是不一样的
lucays
2022-11-21 13:22:58 +08:00
ClericPy
2022-11-21 20:27:53 +08:00
ulimit -n 开到百万, 然后 aiohttp 里 HTTP 适配器那俩 limit 也改大点
julyclyde
2022-11-22 09:00:55 +08:00
wliansheng
2022-11-22 11:49:11 +08:00
@julyclyde 使用 supervisord ,我也遇到这个问题,不用这个那么用什么啊?
julyclyde
2022-11-22 11:52:11 +08:00
@wliansheng 建议托管给 systemd ,并在单一的位置(即 systemd service unit file )集中声明程序运行所需的环境

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX