4.5 KiB
🐞 群分析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
核心问题链
- 群分析模板使用了 外部web字体(
tc.ciallo.ccwu.cc) - 每个字体文件 8MB,3个共 24MB
- Playwright的
page.goto()默认等待load事件 load事件需要等到所有外部资源(包括字体)加载完毕才触发- T2I的systemd服务未配置
HTTP_PROXY/HTTPS_PROXY环境变量 - 浏览器无代理,大文件下载慢,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
然后执行:
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