Skip to content

「空闲内存 < 200MB」这条预算已经破了:实测 155–238MB #10

Description

@Spc-jgs

实测(2026-09-06,.app,会话恢复了几个标签 + 一个终端)

进程 线程 Physical footprint
lite-ide(我们自己的) 8–10 32 MB
WebKit.WebContent 4 106–173 MB
WebKit.GPU 6–8 16–29 MB
WebKit.Networking 3–4 4.5 MB
合计 21–26 155–238 MB

量法:vmmap --summary <pid> | grep "Physical footprint",不是 RSS
(RSS 会把共享的框架重复计进每个进程)。

问题

docs/ARCHITECTURE.md §7 写的是「空闲内存 < 200MB」,而实测在开了几个
标签之后就会破。README 里那条「常驻内存 98 MB(含 mmap 引擎 + WebKit 两个
进程)」更是陈旧的 —— 实际是 4 个进程,而且数字差一倍多。(README 和
ARCHITECTURE 的数字已经在这一轮改成实测值了,但预算本身还没决定怎么办。)

两件事要分开看

Rust 侧只占 32 MB,涨的部分全在 WebKit 的渲染进程上。 也就是说这不是
日志引擎的问题 —— mmap 那套是对的,logengine 的索引内存实测 69.8 KB。
涨的是前端:CM6、xterm、67 个语言包里被真正加载的那些、以及每个打开的文档。

可能的走向(都没验过,先记着)

  1. 改预算的口径。 「空闲」这个词对这个应用是不成立的 —— 会话恢复会把上次
    的标签开回来,它没有真正的空闲态。改成「开 N 个标签 + 1 个终端时 < X MB」
    这种可量的口径。
  2. 量一下 WebContent 里到底是谁。 Safari 的 Web Inspector 能连上
    WKWebView(需要在 tauri.conf.json 里开 devtools 的 release 构建),
    先看堆快照再谈优化。
  3. 关掉的标签有没有真的释放。 {#key active.id} 会销毁重建编辑器实例,
    但 CM6 的 state / 语言包缓存是不是跟着走,没查过。这条最值得先查——
    如果是泄漏,那 155→238 的漂移就有解释了。

先做 3,它是唯一可能是 bug 而不是「本来就要这么多」的一条。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions