Files
AstrBot/docs/zh/others/diagnostics.md
2026-07-07 00:26:03 +08:00

84 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 异常诊断
本文用于整理 AstrBot 出现异常时的通用排查方法。遇到问题时,先确定问题发生在哪个阶段,再收集对应日志;这样提交 Issue 时更容易复现和定位。
## 常见问题类型
- 启动失败进程启动后退出、WebUI 打不开、数据库或配置加载失败。
- 平台连接异常QQ、OneBot、Telegram、企业微信等平台无法连接、收不到消息或无法发送消息。
- 模型请求异常:长时间无回复、频繁超时、报 429/5xx、代理或 API Base 不可用。
- 插件或 MCP 异常启用失败、工具调用失败、依赖安装失败、MCP 服务无响应。
- 任务卡顿或 CPU 异常:消息、主动任务、定时任务已经触发,但中间步骤很久才继续;或进程 CPU 长时间异常升高。
## 先看哪些日志
优先查看 AstrBot 主日志:
```text
data/logs/astrbot.log
```
如果使用 Docker 部署,也可以查看容器日志:
```bash
docker logs <container-name>
```
如果问题和任务卡顿、CPU 异常、多个会话同时变慢有关,还要查看事件循环诊断日志:
```text
data/logs/event_loop_watchdog.log
data/logs/event_loop_watchdog.log.1
```
`event_loop_watchdog.log` 超过 1MB 后会轮转为 `.1`
## 通用排查步骤
1. 确认问题发生的时间点,并截取该时间前后 1 到 3 分钟的日志。
2. 确认问题范围:是所有平台都异常,还是只有某个平台、某个群、某个用户、某个插件异常。
3. 如果是模型无回复或很慢检查模型服务商状态、API Key、API Base、代理、网络、请求超时和重试日志。
4. 如果是插件或 MCP 问题,先禁用最近安装或更新的插件,观察问题是否消失;同时检查插件依赖和 MCP 服务日志。
5. 如果是平台收发消息异常,检查平台适配器是否已连接、平台后台配置是否正确、回调地址或 WebSocket 地址是否可访问。
6. 如果是卡顿或 CPU 异常,参考下方“事件循环卡顿诊断”。
## 事件循环卡顿诊断
事件循环负责调度消息、插件、定时任务、模型请求和工具调用。如果它被同步代码阻塞,很多功能都会表现为延迟。
常见现象:
- 日志停在 `ready to request llm provider``acquired session lock for llm request`、工具调用结果之后,很久才继续。
- 主动任务或定时任务已经触发,但中间某一步迟迟不继续。
- 多个平台或多个会话同时变慢。
- CPU 长时间 100%,或 CPU 不高但请求一直等待外部服务返回。
如果主日志出现以下内容,说明事件循环经历了明显延迟:
```text
Event loop lag detected: 18.432s (threshold 15.000s).
```
如果事件循环长时间没有恢复AstrBot 会把 Python 线程栈写入:
```text
data/logs/event_loop_watchdog.log
```
查看该文件时重点关注栈顶附近正在执行的代码。常见线索包括插件函数、平台适配器、MCP 工具、同步网络请求、`time.sleep()``subprocess.run()`、CPU 密集循环等。
## 提交 Issue 时请附带
提交问题时,请尽量提供以下信息:
- 问题发生的大致时间点和时区。
- AstrBot 版本、部署方式Docker、手动部署、桌面客户端等、操作系统。
- 触发方式启动、普通聊天、群聊、平台回调、定时任务、MCP 工具、插件功能等。
- 影响范围:所有会话、某个平台、某个群、某个用户,还是某个插件。
- `data/logs/astrbot.log` 中问题发生前后 1 到 3 分钟的日志。
- 如果存在卡顿或 CPU 异常,请附带 `data/logs/event_loop_watchdog.log``data/logs/event_loop_watchdog.log.1`
- 如果使用 Docker请附带对应时间段的 `docker logs`
- 已安装插件列表,以及问题是否在禁用第三方插件后仍然出现。
提交日志前请先检查并遮盖 API Key、Token、Cookie、私聊内容等敏感信息。