yihong0618 / xiaogpt

Play ChatGPT and other LLM with Xiaomi AI Speaker
MIT License
6.24k stars 877 forks source link

Docker容器后台运行会导致服务挂掉 #282

Closed Phillweston closed 1 year ago

Phillweston commented 1 year ago

描述

使用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

yihong0618 commented 1 year ago

我们看一下。 我 docker 不太熟不好意思哈

frostming commented 1 year ago

log提供一下

VectorZhao commented 1 year ago

目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。

ibegdo commented 1 year ago

目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。

我的也是,过一段时间就没反映了,咋解决呀

fujie-xiyou commented 1 year ago

目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。

同样的问题 我准备试下弄个定时重启docker容器

VectorZhao commented 1 year ago

目前情况是,过了一段时间之后,再去唤醒小爱说出关键词“请问”时,gpt就没反应了,小爱作答。

同样的问题 我准备试下弄个定时重启docker容器

好想法

chaoqunxie commented 1 year ago

同样的问题,必须要重启才行

jaxwang commented 1 year ago

同样的问题, 不知道源码部署的同学 有没有这个问题, 我看了docker logs , 一切正常.

VectorZhao commented 1 year ago

等作者修吧,陈年旧疾了

yihong0618 commented 1 year ago

大概知道为什么了,我之后研究下

huwei901108 commented 1 year ago

我调试了一下貌似卡在get_latest_ask_from_xiaoai这里面了,怀疑是get超时了。我加了个timeout试试,看看一直运行到明天还会不会卡住

huwei901108 commented 1 year ago

楼里其他同志的情况和我很像,是运行一段时间后会卡住,用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也是可以的。

yihong0618 commented 1 year ago

@huwei901108 感谢,我把这个 issue 打开,我们再观察一段时间哈。

huwei901108 commented 1 year ago

嗯,添加了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

huwei901108 commented 1 year ago

我用的是用户名密码模式登陆,怀疑是登陆过后session的cookie只有一两天有效? 可能设置一个检测到反复get失败就进行重新登陆,也许就好了

yihong0618 commented 1 year ago

@huwei901108 是的,我之前感觉就是这个问题,当 get 不到时候,我们重新拿 session

你试试然后来个 PR?

huwei901108 commented 1 year ago

@yihong0618 嗯,可以。我先加了点调试信息再跑跑看,确认下是不是get的返回变为空了。

另外重新拿session的话是只需要主线程重新执行一次 await self.init_all_data(session) ,然后轮询线程里把cookie_jar更新一下就可以了吧?

yihong0618 commented 1 year ago

@yihong0618 嗯,可以。我先加了点调试信息再跑跑看,确认下是不是get的返回变为空了。

另外重新拿session的话是只需要主线程重新执行一次 await self.init_all_data(session) ,然后轮询线程里把cookie_jar更新一下就可以了吧?

Jim-Jinhua commented 1 year ago

我也是docker运行,当天没问题。时间长不可用了,log中有提示:WARNING get latest ask from xiaoai error, xiaogpt.py:250

yihong0618 commented 1 year ago

@huwei901108 https://github.com/yihong0618/xiaogpt/pull/326 尝试用这种方式了,你看看可以么?

huwei901108 commented 1 year ago

@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了

yihong0618 commented 1 year ago

@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了

不是,是报错两次才重新登陆

huwei901108 commented 1 year ago

@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了

不是,是报错两次才重新登陆

第234行那个应该是每次轮询都登陆哦 @yihong0618

yihong0618 commented 1 year ago

@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了

不是,是报错两次才重新登陆

第234行那个应该是每次轮询都登陆哦 @yihong0618

看下一个 commit

huwei901108 commented 1 year ago

@yihong0618 嗯,把登陆的过程放到每次轮询确实减少很多代码修改,我后面也试下。 说不定也不需要每次轮询都重新登陆,既然大概24小时后可能登陆会失效,设置一个足够长的时间间隔重新登陆可能也就可以了

不是,是报错两次才重新登陆

第234行那个应该是每次轮询都登陆哦 @yihong0618

看下一个 commit

哦看到了

huwei901108 commented 1 year ago

@yihong0618 另外现在我有点担心还有一些未知的卡死存在,我最新的代码加了个poll_manager线程检查轮询线程有没卡死。因为两天我两天前的版本的代码虽然修改量比较大,但是感觉应该可以检测到登陆失效重新登陆了,然而轮询线程又在不知道哪里卡死了。昨天加了poll_manager检测线程过后想跑满24小时,看看能不能解决这个原因不明的卡死。 我觉得既然在retry里检测登陆失效比较简洁,可以先尝试用retry里检测登陆失效并重新登陆来修复看看,然后也是跑下长期测试,看看我遇到的那个不明原因的卡死还在不在

yihong0618 commented 1 year ago

可以试试我这个。虽然 tricky 但我觉得改动量小一些

huwei901108 commented 1 year ago

嗯,我晚点试一下,我上一个容器现在跑了18个小时,再等几个小时跑满24看看log,再切换你的版本试试

huwei901108 commented 1 year ago

@yihong0618 我的容器跑了27个小时,看起来正好在24小时整的时候轮询线程卡住,然后重启了一次,后面就正常了 我的容器启动的时间是 2023-07-29T09:31:30.202568583Z 轮询卡住是 07/30/23 09:31:32 看起来是cookie精准的在24小时过后过期的样子。这样的话设置个定时20个小时重新登陆一次貌似也可以

我一会切换你的那个分支也看看,也是24小时过后看看会不会卡死

yihong0618 commented 1 year ago

@huwei901108 我把我的先合了,会加上你作为共同贡献者,感恩!

huwei901108 commented 1 year ago

@huwei901108 我把我的先合了,会加上你作为共同贡献者,感恩!

好的,那我帮你压力测试一下哈哈