Closed Phillweston closed 1 year ago
我们看一下。 我 docker 不太熟不好意思哈
log提供一下
目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。
目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。
我的也是,过一段时间就没反映了,咋解决呀
目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。
同样的问题 我准备试下弄个定时重启docker容器
目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。
同样的问题 我准备试下弄个定时重启docker容器
好想法
同样的问题,必须要重启才行
同样的问题, 不知道源码部署的同学 有没有这个问题, 我看了docker logs , 一切正常.
等作者修吧,陈年旧疾了
大概知道为什么了,我之后研究下
我调试了一下貌似卡在get_latest_ask_from_xiaoai这里面了,怀疑是get超时了。我加了个timeout试试,看看一直运行到明天还会不会卡住
楼里其他同志的情况和我很像,是运行一段时间后会卡住,用debug级输出会显示: [07/22/23 02:58:45] DEBUG listening new message, timestamp: xiaogpt.py:96 1689994292062 DEBUG polling_event, timestamp: xiaogpt.py:99 1689994292062 DEBUG sleep 0.006272, timestamp: xiaogpt.py:103 1689994292062 [07/22/23 02:58:46] DEBUG listening new message, timestamp: xiaogpt.py:96 1689994292062 DEBUG polling_event, timestamp: xiaogpt.py:99 1689994292062 DEBUG sleep 0.005829, timestamp: xiaogpt.py:103 1689994292062 [07/22/23 02:58:47] DEBUG listening new message, timestamp: xiaogpt.py:96 1689994292062
上面是我额外加了两个log
但是楼主的问题和我们应该是不一样的吧,楼主的启动命令最后添加了/bin/bash,这样运行会替代原本的Entrypoint,也就是[".venv/bin/python3","xiaogpt.py"]开始运行,也启动了个bash然后啥也不干。如果是这个问题就和我们其他人说的docker启动一段时间后卡住有点不一样的。
当然如果楼主启动容器后再docker exec 进入容器手动启动xiaogpt.py也是可以的。
@huwei901108 感谢,我把这个 issue 打开,我们再观察一段时间哈。
嗯,添加了timeout后不会出现轮询进程卡死了,但是可能还是有其他问题存在。 我持续运行两天之后发现后续会出现解析获得的json出现问题的情况,怀疑可能get得到的响应变空了。 log大概如下:
[07/25/23 04:20:03] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.003693, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:04] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 [07/25/23 04:20:05] DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.003676, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:06] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.008126, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:07] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.008108, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:08] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.003690, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:09] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.003816, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:10] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.007579, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:11] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.003726, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:12] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.006111, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:13] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.006134, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:14] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.004688, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:15] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry [07/25/23 04:20:16] WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.006082, timestamp: xiaogpt.py:109 1690245364503 [07/25/23 04:20:17] DEBUG listening new message, timestamp: xiaogpt.py:96 1690245364503 WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry WARNING get latest ask from xiaoai error, xiaogpt.py:259 retry DEBUG polling_event, timestamp: xiaogpt.py:102 1690245364503 DEBUG sleep 0.006069, timestamp: xiaogpt.py:109 1690245364503
我用的是用户名密码模式登陆,怀疑是登陆过后session的cookie只有一两天有效? 可能设置一个检测到反复get失败就进行重新登陆,也许就好了
@huwei901108 是的,我之前感觉就是这个问题,当 get 不到时候,我们重新拿 session
你试试然后来个 PR?
@yihong0618 嗯,可以。我先加了点调试信息再跑跑看,确认下是不是get的返回变为空了。
另外重新拿session的话是只需要主线程重新执行一次 await self.init_all_data(session)
,然后轮询线程里把cookie_jar更新一下就可以了吧?
@yihong0618 嗯,可以。我先加了点调试信息再跑跑看,确认下是不是get的返回变为空了。
另外重新拿session的话是只需要主线程重新执行一次
await self.init_all_data(session)
,然后轮询线程里把cookie_jar更新一下就可以了吧?
嗯
我也是docker运行,当天没问题。时间长不可用了,log中有提示:WARNING get latest ask from xiaoai error, xiaogpt.py:250
@huwei901108 https://github.com/yihong0618/xiaogpt/pull/326 尝试用这种方式了,你看看可以么?
@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了
@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了
不是,是报错两次才重新登陆
@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了
不是,是报错两次才重新登陆
第234行那个应该是每次轮询都登陆哦 @yihong0618
@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了
不是,是报错两次才重新登陆
第234行那个应该是每次轮询都登陆哦 @yihong0618
看下一个 commit
@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了
不是,是报错两次才重新登陆
第234行那个应该是每次轮询都登陆哦 @yihong0618
看下一个 commit
哦看到了
@yihong0618 另外现在我有点担心还有一些未知的卡死存在,我最新的代码加了个poll_manager线程检查轮询线程有没卡死。因为两天我两天前的版本的代码虽然修改量比较大,但是感觉应该可以检测到登陆失效重新登陆了,然而轮询线程又在不知道哪里卡死了。昨天加了poll_manager检测线程过后想跑满24小时,看看能不能解决这个原因不明的卡死。 我觉得既然在retry里检测登陆失效比较简洁,可以先尝试用retry里检测登陆失效并重新登陆来修复看看,然后也是跑下长期测试,看看我遇到的那个不明原因的卡死还在不在
可以试试我这个。虽然 tricky 但我觉得改动量小一些
嗯,我晚点试一下,我上一个容器现在跑了18个小时,再等几个小时跑满24看看log,再切换你的版本试试
@yihong0618 我的容器跑了27个小时,看起来正好在24小时整的时候轮询线程卡住,然后重启了一次,后面就正常了 我的容器启动的时间是 2023-07-29T09:31:30.202568583Z 轮询卡住是 07/30/23 09:31:32 看起来是cookie精准的在24小时过后过期的样子。这样的话设置个定时20个小时重新登陆一次貌似也可以
我一会切换你的那个分支也看看,也是24小时过后看看会不会卡死
@huwei901108 我把我的先合了,会加上你作为共同贡献者,感恩!
@huwei901108 我把我的先合了,会加上你作为共同贡献者,感恩!
好的,那我帮你压力测试一下哈哈
描述
使用Docker容器后台detach运行,会导致服务挂掉,使用docker ps -a查询发现服务已停止。
我使用的是docker后台交互运行方式,防止因容器无前台进程导致自动停止。
运行命令
docker run -e OPENAI_API_KEY=xxxx -dit yihong0618/xiaogpt --restart=always --account=xxxx --password=xxxx --hardware=X10A --use_chatgpt_api --mute_xiaoai --use_command /bin/bash