# 🐞 群分析T2I渲染超时排查记录 **日期**:2026-04-29 **主人**:☭Kronecker **排查者**:ATRI 🥕 --- ## 📋 问题描述 执行 `/群分析` 命令生成群聊分析报告后,尝试通过T2I服务将其渲染为图片时失败,返回 `500 Internal Server Error`。QQ收到内容为 `Internal Server Error` 的21字节文件。 --- ## 🔍 排查过程 ### Step 1: 查看T2I服务日志 通过 `journalctl -u t2i` 排查T2I服务端日志,发现以下错误: ``` playwright._impl._errors.TimeoutError: Page.goto: Timeout 100000ms exceeded. Call log: - navigating to "file:///opt/astrbot-t2i-service/data/rendered_xxx.html", waiting until "load" ``` **结论**:Playwright浏览器在打开HTML文件时,等待 `load` 事件超时(100秒)。 ### Step 2: 分析超时HTML文件 | 属性 | 值 | |:---|:---| | HTML文件路径 | `/opt/astrbot-t2i-service/data/rendered_xxx.html` | | 文件大小 | 153KB | | 行数 | 2856行 | ### Step 3: 确认外部字体是罪魁祸首 HTML模板中引用了 **3个LXGW WenKai (霞鹜文楷) web字体文件**: | 字体文件 | CDN地址 | |:---|:---| | LXGW WenKai Regular | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKai-Regular.woff2` | | LXGW WenKai Medium | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKai-Medium.woff2` | | LXGW WenKai Mono | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKaiMono-Regular.woff2` | **每个字体文件约8MB**,3个合计 **~24MB**。 ### Step 4: 检查CDN可达性 CDN服务器 `tc.ciallo.ccwu.cc` 本身可达: - HTTP 200 ✅(Cloudflare缓存命中) - 从服务器有代理无代理均可访问 - 但文件过大(8MB/个) ### Step 5: 检查代理配置 **插件配置**(AstrBot WebUI - T2I渲染环境切换): - 渲染环境:内地 - Google Fonts镜像:`https://fonts.loli.net` - Gstatic镜像:`https://gstatic.loli.net` **系统代理变量**: ``` HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 ALL_PROXY=socks5h://127.0.0.1:7890 ``` **T2I系统服务文件**(`/etc/systemd/system/t2i.service`): ``` [Service] Type=simple WorkingDirectory=/opt/astrbot-t2i-service ExecStart=/usr/bin/python3 /opt/astrbot-t2i-service/main.py Environment=PLAYWRIGHT_CHROMIUM_EXECUTABLE=/usr/bin/chromium-browser Restart=always RestartSec=5 ``` ⚠️ **没有配置任何代理环境变量!** --- ## 🎯 根因确认 ``` 群分析HTML模板 → 引用3个@font-face外部字体(各~8MB) → Playwright浏览器打开本地HTML → 尝试从CDN下载字体 → 浏览器无代理配置(T2I systemd服务未继承系统代理) → 24MB字体下载缓慢 → 等待100秒 → 超时TimeoutError → 返回500 Internal Server Error ``` ### 核心问题链 1. 群分析模板使用了 **外部web字体**(`tc.ciallo.ccwu.cc`) 2. 每个字体文件 **8MB**,3个共 **24MB** 3. Playwright的 `page.goto()` 默认等待 `load` 事件 4. `load` 事件需要等到所有外部资源(包括字体)加载完毕才触发 5. T2I的systemd服务未配置 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量 6. 浏览器无代理,大文件下载慢,100秒内未完成 → Timeout ### 为什么自我介绍的T2I渲染成功了? 自我介绍的T2I渲染使用的是**行内样式HTML**(无外部资源),页面瞬间加载完成,`load` 事件即刻触发。而群分析模板依赖外部web字体,因此超时。 --- ## 🛠 修复方案 ### 方案A(推荐):T2I服务添加代理环境变量 在 `/etc/systemd/system/t2i.service` 的 `[Service]` 区域添加: ``` Environment=HTTP_PROXY=http://127.0.0.1:7890 Environment=HTTPS_PROXY=http://127.0.0.1:7890 ``` 然后执行: ```bash systemctl daemon-reload systemctl restart t2i ``` **优点**:一劳永逸,所有需要外部资源的HTML都能通过代理加载 ### 方案B:移除外部字体引用 修改群分析HTML模板,改用系统字体栈,去掉 `@font-face` 引用。 **优点**:不依赖网络加载,渲染速度快 **缺点**:字体不如霞鹜文楷美观 ### 方案C:修改wait_until策略 T2I渲染时设置 `wait_until: "domcontentloaded"` 而不是 `"load"`,不等字体加载完就截图。 **优点**:改动最小 **缺点**:字体可能没加载完成,截图时显示备选字体 --- ## 📎 相关文件 - T2I服务:`/opt/astrbot-t2i-service/` - 服务配置:`/etc/systemd/system/t2i.service` - T2I日志:`journalctl -u t2i` - 字体CDN:`https://tc.ciallo.ccwu.cc/` - 插件配置:AstrBot WebUI → 插件配置 → t2i渲染环境切换 --- *记录者:ATRI 🥕 · 2026-04-29 16:45*