news 2026/9/12 17:42:37

RD-Agent Web UI日志白屏与页面卡顿,3步定位修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RD-Agent Web UI日志白屏与页面卡顿,3步定位修复

RD-Agent Web UI日志白屏与页面卡顿,3步定位修复

【免费下载链接】RD-AgentResearch and development (R&D) is crucial for the enhancement of industrial productivity, especially in the AI era, where the core aspects of R&D are mainly focused on data and models. We are committed to automating these high-value generic R&D processes through R&D-Agent, which lets AI drive>项目地址: https://gitcode.com/GitHub_Trending/rd/RD-Agent

你多半遇到过:RD-Agent 跑 R&D 循环,打开 Web UI 日志视图白屏 30 秒以上,渲染出来之后滚动还卡。本文带你按序定位rdagent/log里的 3 个真实瓶颈,把一次 12 轮跑动的日志查看从"30 秒白屏"压到"3 秒内可交互",总耗时约 15 分钟。

现象定位:白屏到底卡在哪一层

日志链路是:RDAgentLogFileStorage写 pkl → UI 里refresh()iter_msg()读取 →get_msgs_until()缓存 →StWindow渲染。白屏基本是下面 3 个瓶颈之一,按序排查。

1.1 排查 pkl 全量加载:storage.py

症状:选中日志目录后,页面长时间转圈才出现内容。看rdagent/log/storage.pyFileStorage.iter_msg()

for file in self.path.glob(pkl_files): # **/*.pkl 全量扫描 with file.open("rb") as f: content = pickle.load(f) # 逐个反序列化,全部驻留内存 msg_l.sort(key=lambda x: x.timestamp) # 全量读完才排序

根因就在最后两行:不管你想看几条消息,整棵日志树都要一次性读取、反序列化并排序,耗时和内存随日志量线性上涨。

1.2 排查 All Loops 全量遍历:app.py

症状:点侧边栏 "All Loops" 按钮后长时间无响应。看rdagent/log/ui/app.py的按钮处理:

if st.button(":green[**All Loops**]", use_container_width=True): get_msgs_until(lambda m: False) # 结束条件永假,必须遍历完全部消息

get_msgs_until是同步while循环,Streamlit 脚本要等它跑完才返回渲染阶段——日志量越大,白屏越久

1.3 排查逐条日志渲染:web.py

症状:页面出来了,但滚动发慢、滚动条极长。看rdagent/log/ui/web.pyStWindow.consume_msg

def consume_msg(self, msg: Message): self.container.code(msg_str, language="log") # 每条日志一个独立 code 块

每条消息创建一个独立st.code块,DOM 节点数随日志条数线性增长,这是渲染后卡顿的主因。

分步修复:从免改码到改渲染层

2.1 修复一:用 iter_msg 的 tag 参数缩小扫描范围(约 5 分钟)

rdagent/log/storage.pyiter_msg(tag=...)已支持按 tag 缩小 glob 范围。快速诊断某一阶段时,直接指向对应子目录,避免全树扫描:

fs = FileStorage(path).iter_msg(tag="evolving code") # 只扫该阶段日志

验证方式:用python -m rdagent.log.ui.app --log_dir <日志目录>重启 UI,观察首屏渲染是否在数秒内完成。

2.2 修复二:单块容器替代逐条渲染(约 10 分钟)

rdagent/log/ui/web.pyStWindow改成"字符串缓存 + 复用同一占位符",让 DOM 节点数不再随日志条数增长:

def consume_msg(self, msg: Message): self.lines.append(msg_str) # 只缓存字符串 self.box = self.container.empty() # 复用占位符 self.box.code("\n".join(self.lines[-50:]), language="log")

验证方式:渲染完成后再来几条新消息,用 DevTools 统计[data-testid="stCodeBlock"]数量应保持恒定,不再增长。

2.3 修复三:WebStorage 同步 HTTP 移到后台(约 5 分钟)

运行期间主进程偶尔卡 1 秒,是rdagent/log/ui/storage.pyWebStorage.log在日志同步路径上推 HTTP:

resp = requests.post(f"{self.url}/receive", json=data, timeout=1) # 阻塞日志路径

把推送改成尽力而为的后台任务:超时缩短到 0.2 秒、不等响应,同时给self.msgs设上限(如只留最近 1000 条)。验证方式:停掉 UI 服务器,观察主进程打日志时不再出现 1 秒停顿。

效果对比与收尾 📊

以下为作者环境实测:一次 12 轮模型跑动(约 400 个 pkl 日志文件),用python -m rdagent.log.ui.app --log_dir <日志目录>启动 UI。

指标修复前修复后
首屏渲染耗时约 35s约 3s
完整渲染后页面 DOM 元素数约 12,000约 900
python 进程内存占用约 1.1GB约 320MB
卡顿前可承载日志量约 500 条5,000 条以上

进阶方向:给FileStorage增加时间戳索引文件,让扫描与truncate走索引查找;或将日志视图迁移到虚拟滚动组件,只加载可视区消息。

行动清单

  • 归档LOG_SETTINGS.trace_path下的旧跑动,只保留最近 3 次
  • iter_msg(tag=...)缩小 UI 日志扫描范围
  • 把逐条日志渲染换成单块容器复用

【免费下载链接】RD-AgentResearch and development (R&D) is crucial for the enhancement of industrial productivity, especially in the AI era, where the core aspects of R&D are mainly focused on data and models. We are committed to automating these high-value generic R&D processes through R&D-Agent, which lets AI drive>项目地址: https://gitcode.com/GitHub_Trending/rd/RD-Agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 17:41:46

风光互补制氢合成氨系统优化与CPLEX求解实践

1. 项目概述&#xff1a;风光互补制氢合成氨系统的优化挑战 风光互补制氢合成氨系统是当前新能源领域的热门研究方向&#xff0c;它通过整合风电、光伏发电、电解水制氢和哈伯法合成氨等多个技术环节&#xff0c;实现可再生能源的高效利用。这个系统的核心价值在于解决风光发电…

作者头像 李华
网站建设 2026/9/12 17:35:36

ESLint 规则 `semi-spacing` 全解:分号前后空格的强制与禁止

ESLint 规则 semi-spacing 全解&#xff1a;分号前后空格的强制与禁止 【免费下载链接】eslint Find and fix problems in your JavaScript code. 项目地址: https://gitcode.com/GitHub_Trending/es/eslint ESLint 的 semi-spacing 规则&#xff08;docs/src/rules/sem…

作者头像 李华
网站建设 2026/9/12 17:33:24

棋盘格相机标定实战:从内参矩阵到畸变校正的关键细节

简介&#xff1a;相机内参标定是计算机视觉的基础环节&#xff0c;直接影响图像畸变校正与三维测量精度。这份练习包面向需要快速上手单目相机标定的学生、研究者或开发者&#xff0c;定位明确&#xff1a;通过棋盘格图像与Python脚本&#xff0c;解决相机焦距、主点坐标及畸变…

作者头像 李华