🔒 纯本地运行 · 零依赖 · 不联网

你的 Mac 变慢,
可能只是电池坏了

macbench 是一个开源跑分脚本:电池故障的 Mac 即使插着充电器,macOS 也可能把 CPU 限速一半。在换电池前后各跑一次,用数据确认真相。

换电池前 vs 换电池后 —— 一次 compare 的真实输出
$ ./macbench-apple.sh compare results/result_坏电池.txt results/result_换电池后.txt

================ macbench-apple 对比结果 ================
项目                第一次       第二次    比值(二/一)
---------------------------------------------------
单核分数            240.0       480.0      0.50  ← 性能被限一半
全核分数           1377.0      2754.0      0.49
内存带宽            49.85       49.12       0.98
---------------------------------------------------
CPU_SPEED_LIMIT: 坏电池时 50 → 换电池后 100
STEP 0

先确认你的 Mac 是哪种芯片

两个版本针对两种架构分别设计,选错时脚本会拒绝运行并提示,不会跑错。

Apple Silicon 版

适用于 M1 / M2 / M3 / M4 · 20 KB
  • 识别性能核(P)/能效核(E)拓扑
  • 30 秒持续性能曲线,区分「一直被限」和「跑久才降」
  • QoS 调度优先派发性能核
下载 macbench-apple.sh

SHA256
8b3f1a3ae767ae8ae3a0e53dce79f5349254c8a33ea61461f6a9f168a41d354f

Intel 版

适用于 Intel Core 芯片的 Mac · 15 KB
  • 标称 / 睿频频率基准对照
  • --freq 读取满载实际频率
  • XCPM 热节流等级观测
下载 macbench-intel.sh

SHA256
30b33a63160ab5981d858ee34fc7d8c1caa43cb95b7a36edd25c306e4620e03b

👉 怎么确认?在下方教程第 1 步有一条命令,输出以 Apple M 开头 → 用 Apple 版;输出是 i5 / i7 / i9 等 → 用 Intel 版。不想敲命令的话:2020 年底之后买的 MacBook 基本都是 Apple Silicon 版
TUTORIAL

图文教程:从下载到出报告

每一步都可以直接复制粘贴。全程约 1 分钟,不需要安装任何软件。

第 1 步

打开「终端」,确认芯片型号

终端在哪里?按 ⌘ + 空格 打开聚焦搜索,输入 终端Terminal,回车打开。把下面这行粘贴进去(⌘+V),按回车:

$ sysctl -n machdep.cpu.brand_string
Apple M1   ← 以 "Apple M" 开头:用 Apple 版(下面都以此为例)
  (如果显示 Intel Core i5 / i7 等:改用 macbench-intel.sh,步骤完全一样)
第 2 步

下载脚本(终端里一行搞定)

继续在终端里粘贴回车。下载的文件在你的「下载」文件夹(也可以直接点上面下载按钮,效果相同)。

$ curl -fLO https://macbench.pages.dev/macbench-apple.sh
# Intel 用户请改用:
# curl -fLO https://macbench.pages.dev/macbench-intel.sh
💡 下载完可以校验一下完整性(可选):shasum -a 256 macbench-apple.sh,结果应和上面卡片里的 SHA256 一致。
第 3 步

进入下载目录,给脚本执行权限

macOS 出于安全考虑,新下载的脚本默认不允许直接运行,需要先解锁(只需做一次):

$ cd ~/Downloads
$ chmod +x macbench-apple.sh
⚠️ 如果这里报错 command not foundNo such file:说明文件名对不上。在终端输入 ls ~/Downloads 看一眼实际文件名(比如浏览器存成了 macbench-apple (1).sh.txt 结尾),按实际名字改上面命令即可。
第 4 步

跑第一次测试(约 1 分钟)

跑之前请关掉浏览器、聊天软件等可关的程序,插好充电器。然后:

$ ./macbench-apple.sh

运行中会发生什么:

  1. 显示机型、芯片、核心信息;
  2. 请你给测试起个名字 —— 比如「坏电池接电源」,直接回车跳过也行;
  3. 读取电池健康、限速状态;
  4. 依次跑单核、全核、内存、30 秒持续曲线,期间别碰电脑;
  5. 结果自动保存在 results/ 文件夹里,屏幕上会直接显示分数。
💡 想看更深的证据?加一个 --freq 参数(需要输一次开机密码),用系统官方的 powermetrics 只读工具看实际运行频率:./macbench-apple.sh --freq
第 5 步

换电池后,再跑一次并对比

换完电池后,在尽量相同的条件下(同样插电源、同样关掉其他程序)重复第 4 步,这次起名「换新电池后」。然后用 compare 对比两次结果 —— 把命令里的文件名换成你自己的:

$ ./macbench-apple.sh compare \
      results/result_20260915_200415.txt \
      results/result_20260920_150000.txt
                                            ↑ 旧文件        ↑ 新文件
   (文件名在 results/ 文件夹里找,输入 results/ 后按 Tab 可以自动补全)

对比结果怎么看?往下翻到「结果判读」一节。

卡住了?

常见报错速查

「无法打开,因为无法验证开发者」
$ xattr -d com.apple.quarantine ~/Downloads/macbench-apple.sh
  (去掉 macOS 给下载文件加的隔离标记;脚本源码是明文,可先打开审阅)

「Permission denied」
$ chmod +x macbench-apple.sh   ← 第 3 步漏了,补上即可

「本机不是 Apple Silicon Mac」
  你的 Mac 是 Intel 芯片,请下载 macbench-intel.sh,命令全部相同
METRICS

它测什么

单核 / 全核性能

混合浮点+整数负载,固定时间统计迭代数,Apple 版用 QoS 优先派发性能核。

持续性能曲线

Apple 版独有:满载 30 秒分段统计吞吐量,区分「一直被限速」和「跑久才降频」。

内存带宽

256 MB 缓冲区反复拷贝测 GB/s。降频主要影响 CPU,内存不变可以交叉验证。

系统限速状态

读 pmset 自报告的 CPU_Speed_Limit:<100 是「系统主动限速」的直接强证据。

电池健康

循环次数、当前容量 / 设计容量百分比、永久故障标记,一并写进结果文件。

实际频率(--freq)

用官方只读工具 powermetrics 看 P/E 集群实际频率与功耗,需要输一次密码。

INTERPRETATION

结果判读

分数只用于同一台机器换电池前后对比,跨机器比较没有意义。

现象结论
单核/多核比值 ≈ 0.50性能被限制一半,典型的无电池降频
多核比值明显低于单核比值睿频被禁用,或部分核心被限制
CPU_SPEED_LIMIT < 100强证据:macOS 明确报告了主动限速
内存带宽比值 ≈ 1.0内存未被限制(正常现象)
所有比值 ≈ 1.0 且无限速两种状态性能无差别
✓ 可以放心下结论的情况:像「正常 100 → 异常 51」这样数量级的差异, 配合 CPU_SPEED_LIMIT < 100,基本可以确认电池故障拖慢了整机。
⚠ 两个容易误读的地方:
CPU_Speed_Limit < 100 是强证据,但反过来不成立 —— 字段缺失或为 100% 时不能单独排除其他形式的频率管理,请配合持续曲线(SUSTAIN_MIN_RATIO)和 --freq 实际频率交叉验证;
② 分数有正常波动,比值在 0.95~1.05 之间建议视为噪声。 像「正常 100 vs 异常 94」的 -6% 差异,需要先在同一状态连跑两次确认测试稳定后再下结论。
FAQ

常见问题

这个脚本安全吗?会不会乱改我的系统?
不联网、不修改任何系统设置。只用 macOS 自带的 cc、pmset、ioreg、sysctl 等系统工具;唯一需要密码的是可选 --freq 模式(运行官方只读采样工具 powermetrics)。只写入脚本目录下的 results/ 和自动清理的系统临时目录。测试程序源码明文嵌在脚本里,可以先用文本编辑器打开审阅再运行。
M 系列上为什么不显示「标称最高频率」?
Apple Silicon 不提供 hw.cpufrequency_max 这个系统值,是平台特性不是缺陷。Apple 版因此改用 P/E 核心拓扑 + 持续性能曲线 + --freq 实际频率来判断,不依赖这个字段。
为什么要拆成两个脚本?
两套架构的频率管理机制完全不同:Intel 可以直接观察「限速 → 频率下降 → 分数下降」的对应链路;Apple Silicon 没有标称 MHz,核心异构(P/E),需要 QoS 调度和持续性能曲线才能看清真实性能。一个脚本同时兼容两者会让指标解释变得含糊。
为什么不用 Geekbench?
Geekbench 更全面,但需要下载安装、分数受版本影响、不易脚本化对比。macbench 针对同一台机器换电池前后的对比场景定制:把限速状态和跑分绑定记录,直接输出比值。
测试时必须插着电源吗?
对比「坏电池接电源」和「换电池后接电源」时,两次都插电源、条件一致即可。如果单独想测电池供电的性能,脚本也会记录供电状态,但注意苹果对电池供电本身也有性能管理策略。