
这是 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 程序的代码涉及比较复杂的业务逻辑暂时没办法发出来。
有什么办法排查吗?
1 eason1874 2022 年 11 月 21 日 盲猜 DNS 缓存问题,bash 环境有缓存,而 aiohttp 没有缓存 |
2 pcbl 2022 年 11 月 21 日 via Android 类似的毛病我遇到过自己排查分析了好几天才搞定 楼主试着把 supervisor 中文件打开数限制调大应该可以解决。 |
3 edis0n0 OP @eason1874 #1 bash 还能缓存 python 脚本解析的域名吗?是在 bash 中手动用 python3.9 命令运行同一个脚本,一点问题都没有,supervisor 运行的 python3.9 5 分钟就几十万条报错 |
4 guanzhangzhang 2022 年 11 月 21 日 systemd 的 limit file 和 supervisor 你的 program 的 file open 啥的都加大一些试试 |
6 edis0n0 OP 就加了一行 minfds = 655350 然后重启 supervisor 服务 |
7 edis0n0 OP 昨天排查了一整天都没解决 |
8 liuzhedash 2022 年 11 月 21 日 |
9 guanzhangzhang 2022 年 11 月 21 日 @liuzhedash supervisor 这种肯定不会缓存的,因为 dns 缓存都是 glibc 或者 java 的 runtime 有参数决定的,手动 run 没问题,放 supervisor 纳管就有问题明显就是 fd 相关的。例如很多小白 mysql 用 systemd 纳管,写了个很简单的 systemd.service 文件,systemd 的默认 fd 是 4096 ,会导致 mysql 效率不行 |
10 edis0n0 OP @guanzhangzhang #9 手动 run 的话有缓存吗?直接改 fd 让程序跑起来会不会影响性能? |
11 edis0n0 OP 我们没有专业运维搞不定,数据库用的都是各大云厂商的云数据库服务 |
12 guanzhangzhang 2022 年 11 月 21 日 @edis0n0 你可以搜下 关于 limits 生效的四个案例 ,用户和纳管的进程是不一样的 |
13 lucays 2022 年 11 月 21 日 |
14 ClericPy 2022 年 11 月 21 日 ulimit -n 开到百万, 然后 aiohttp 里 HTTP 适配器那俩 limit 也改大点 |
15 julyclyde 2022 年 11 月 22 日 |
16 wliansheng 2022 年 11 月 22 日 @julyclyde 使用 supervisord ,我也遇到这个问题,不用这个那么用什么啊? |
17 julyclyde 2022 年 11 月 22 日 @wliansheng 建议托管给 systemd ,并在单一的位置(即 systemd service unit file )集中声明程序运行所需的环境 |