monosave

分享一个我自己开发的 mac 状态栏工具,包含网速内存处理器等实时占用的显示,几乎是这类工具里最简单的了

  •  
  •   monosave · 5h 31m ago · 395 views

    写它的初衷很简单,就想着自己整一个轻量的、够用就行的。

    说说它能干啥吧。菜单栏实时显示 CPU 、内存、GPU 、网速,不用打开活动监视器瞄一眼就知道卡在哪。内存占用按应用列出来,吃内存的大户点一下就能让它正常退出把内存吐出来。还能帮你卸载应用,扫本体加关联文件一起丢进废纸篓,删错了还能捞。启动项扫描、电池健康、磁盘占用这些也都有,资源持续飙高还能弹个通知提醒你。

    优点这块我自己觉得有几个:

    一是轻,Go 写的原生菜单栏应用,跑起来几乎不占资源,开着没啥存在感。 二是全本地,啥数据都不上传,隐私这块比较放心。 三是开源免费,代码都在 GitHub 上,谁都能看明白。

    他的适用范围很广,如果过你需求比较复杂可以看看腾讯的柠檬我觉得是这类软件里还不错的选择,然后写这个软件的初衷是 x-status (好像叫这个名字忘记了) 这个工具,感兴趣的也可以看看。

    缺点: 只支持 macOS 13+,而且只支持 Apple Silicon ,Intel 的朋友用不了。 卸载是启发式匹配,靠 bundle id 和应用名扫关联文件,特别冷门的 App 可能扫不全,删之前看一眼勾选项比较稳。

    https://github.com/xbenduan/vitals

    9 replies  •  2026-10-10 19:16:24 +08:00
    zstone123
        1
    zstone123  
       4h 25m ago
    确实挺轻量简洁👍
    fds
        2
    fds  
       3h 43m ago
    👍很棒。我加了个剩余磁盘空间显示。另外遇到个报错,分析如下:

    问题:启动约 30 秒后弹窗「操作未完成 / context deadline exceeded 」。

    原因:loadApplications 在启动时后台扫描 /Applications ,整体限时 30s 。core.ListApplications 对每个 .app 串行做 4 件事,各自开子进程或遍历目录:mdls 取显示名、WalkDir 算包体积、pgrep -f 判断是否运行、sips 转图标。我机器上 200 个应用合计超过 30s ,超时后整份结果被丢弃,错误原样弹到 UI 。

    最重要的改进(按价值排序):

    1. 超时不要丢弃已扫描结果。ListApplications 在 ctx.Err() 时返回已收集的部分列表,loadApplications 对 context.DeadlineExceeded 只记 log 不弹窗。这是直接消除弹窗的改动。
    2. 包体积延迟计算。pathSize 全目录遍历是最大开销(约 11s ),列表阶段不需要。改为选中应用时在后台与关联文件扫描一起算。
    3. 运行状态一次性获取。启动时跑一次 ps -axo comm=,内存里按 appPath/Contents/MacOS/ 前缀匹配,替代每个应用一次 pgrep (约 6s )。
    4. 后续可选:mdls 改读 Info.plist 的 CFBundleDisplayName ,sips 图标转换延迟到可见时。这两项仍占约 14s 。

    效果:1–3 实施后,200 个应用扫描 30s+ 降到 14.7s ,不再弹窗。
    fds
        3
    fds  
       3h 35m ago
    后续改进:把列表扫描阶段剩余的两个子进程也去掉了,200 个应用的 ListApplications 从 14.7s 降到约 94ms 。

    1. mdls 改为直接读 bundle 。按当前界面语言依次读 Contents/Resources/<lproj>/InfoPlist.strings (中文:zh-Hans / zh_CN / zh ,英文:en / English / Base ),取 CFBundleDisplayName 或 CFBundleName ;没有本地化文件时回退 Info.plist 的同名字段,再回退目录名。howett.net/plist 能解析 .strings 的 XML 、二进制和 OpenStep 文本三种格式,实测微信 / 熊掌记 / 飞书等中文名正确。副作用:原 mdls 返回的是 Finder 文件名(如 Alfred 5 ),现在优先 bundle 显示名( Alfred )。
    2. sips 图标转换延迟到首次渲染。AppInfo 去掉 IconPNG ,新增 core.ApplicationIconPNG(ctx, appPath)。UI 层在 applicationImage 首次遇到某应用时标记 pending 并起 goroutine 转换,4 并发、单个 10s 超时,完成后通过 win.Update 写入图标缓存,期间显示头像占位。列表出现不再等图标。

    累计效果( 200 个应用):

    - 原始:>30s ,超时弹窗
    - 保留部分结果 + 体积延迟 + ps 一次性:14.7s
    - 再加 Info.plist 读名 + 图标延迟:约 94ms
    EvanG
        4
    EvanG  
       3h 22m ago
    不错,感觉比 istatistica 直观,切来试试
    monosave
        5
    monosave  
    OP
       3h 1m ago
    @fds 感谢建议,回去优化一下
    monosave
        6
    monosave  
    OP
       3h 0m ago
    @EvanG 欢迎体验
    monosave
        7
    monosave  
    OP
       3h 0m ago
    @zstone123 欢迎体验
    monosave
        8
    monosave  
    OP
       2h 50m ago
    @fds 大佬不介意的话欢迎直接提 mr
    jdzrjk
        9
    jdzrjk  
       2h 20m ago
    好用,谢谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 13:37 · PVG 21:37 · LAX 06:37 · JFK 09:37
    ♥ Do have faith in what you're doing.