指南/哪个App在占用CPU或内存
如何查看Mac的CPU和内存占用,逐个App查看
简要回答
打开活动监视器,点按“CPU”并按“% CPU”排序,或点按“内存”并按“内存”排序。排在前面的就是此刻占用最多的。选取“显示”→“所有进程,分层显示”,可以看到帮助程序排在启动它们的App下面。判断内存要看“内存压力”图表,而不是“已使用内存”:绿色表示Mac的内存够用。Vitals是一款Mac系统监控工具,每个App只占一行并已计入帮助程序,还能显示过去几小时或30天内哪些App占用最多。
如何查看哪个App在占用CPU或内存
- 01 按下⌘空格键,输入“活动监视器”,然后按下Return键。
- 02 点按“CPU”,然后点按“% CPU”列标题,直到最高的数值排在最上面。
- 03 点按“内存”,然后用同样的方法点按“内存”列标题。
- 04 选取“显示”→“所有进程,分层显示”。帮助程序会移到启动它们的App下面,所以浏览器的标签页会排在浏览器下面。
- 05 查看“内存”标签页底部的“内存压力”图表。绿色表示Mac的内存够用,不管“已使用内存”看起来有多满。
- 06 要让仪表一直留在屏幕上,选取“窗口”→“CPU使用率”。要查看过去几分钟每个内核的情况,选取“窗口”→“CPU历史记录”。
要退出一个忙碌的App,选中它并点按工具栏中的停止按钮(带×的八边形),然后点按“退出”。只有App没有响应时才用“强制退出”。别碰kernel_task和WindowServer这类系统进程:它们忙,是因为别的东西在忙。
活动监视器擅长回答一个问题:这一秒是什么在忙。对于通常接踵而来的问题,它就没那么清楚了。这个进程属于哪个App?内存数值高是问题吗?一小时前风扇响起来时,是什么在占用CPU?下表说明哪个数值回答哪个问题,表后的各节则解释最让人困惑的那些数字。
哪个数值回答哪个问题
| 问题 | 查看位置 | 看什么 |
|---|---|---|
| 此刻哪个App在占用CPU? | 活动监视器→“CPU” | “% CPU”,从高到低排序。100%是一个内核满载 |
| 整台Mac有多忙? | 活动监视器→“CPU”底部 | “系统”、“用户”和“闲置”,三者相加为100% |
| 哪个App占用内存最多? | 活动监视器→“内存” | “内存”,从高到低排序,并选取“显示”→“所有进程,分层显示” |
| Mac内存不足吗? | 活动监视器→“内存”底部 | “内存压力”:绿色没问题,黄色偏紧,红色不足 |
| Mac在把磁盘当内存用吗? | 活动监视器→“内存”底部 | “已使用的交换”,以及它是否持续增长 |
| 一小时前是什么在忙? | 活动监视器→“能耗” | “12小时电源”,唯一带历史数据的列 |
“% CPU”为什么会超过100%
为什么一个App会显示成几十个进程
浏览器和用网页技术构建的App会把工作拆分到多个帮助程序中:每个标签页或网站一个,图形一个,网络一个,每个扩展一个。Chrome会把它们显示为Google Chrome Helper和Google Chrome Helper (Renderer),Safari浏览器则用网站地址显示它的标签页。一个App可能占30或40行,单看每一行都不大。关于浏览器,请参阅Chrome占用内存过多。
“显示”→“所有进程,分层显示”会把每个帮助程序放在启动它的App下面,这样就知道它属于谁。活动监视器不会把它们加起来,而你自己把“内存”列相加会多算,因为进程之间共享的内存在每个进程里都算了一遍。把总和当作一个粗略的上限就好。
内存占用高什么时候是问题,什么时候不是
“已使用内存”接近“物理内存”的Mac是正常的。macOS会把最近用过的文件以已缓存文件的形式留在内存中,并且在动用磁盘之前先压缩内存。闲置的内存就是浪费的内存,所以条满了说明macOS正在充分利用你花钱买的内存。
判断Mac内存是否不足,要看内存压力。绿色表示一切都装得下。黄色表示macOS正在靠压缩和交换来应付,在Apple silicon上暂时这样没问题。红色表示它应付不过来了,App会变慢或停止响应。已使用的交换一整天不断增长,说明的也是同一件事。在“终端”中,memory_pressure的最后一行会给出整台Mac可用内存的占比。
- 平常工作时内存压力就变黄或变红:说明这台Mac需要少开几个App,或者下次买内存更大的。Apple silicon Mac的内存无法事后加装。请参阅如何释放内存。
- 退出导致问题的App后,内存压力仍然是红色:重启Mac。
- 某个App的“内存”数值一直在涨,而你并没有更多地使用它:它很可能在内存泄漏。退出后重新打开,并更新它。
你会在前面看到的系统进程
有些最忙的行属于macOS本身。它们通常是在为别的东西干活,所以该问的是:是什么让它们忙起来的。
- kernel_task:CPU占用高通常说明Mac太热了,macOS让处理器保持忙碌,好减少它发热的时间。请参阅Mac风扇为什么会变吵。
- WindowServer:负责绘制屏幕上的一切。App不停重绘或连接了多台显示器时,它会很忙。
- mds_stores和mdworker:“聚焦”索引,在macOS更新或大量拷贝后会很繁重。
- photoanalysisd和mediaanalysisd:“照片”在分析你的图库。它们会自行完成。
- launchd:启动其他所有进程。它很忙时,说明有某个登录项或后台任务在不断重启。
如何在“终端”中查看CPU和内存
“终端”无需打开窗口就能给出同样的数值,通过SSH或在脚本中使用都很方便。
- 运行
top -o cpu可查看按CPU排序的实时列表,运行top -o mem则按内存排序。按q退出。 - 运行
ps -Ao pid,pcpu,rss,comm -r | head -11可查看此刻CPU占用最多的十个进程。用-m代替-r即可按内存排序;rss列的单位是KB。 - 运行
memory_pressure可查看“内存压力”图表背后的内存统计数据。最后一行给出可用内存的占比。
真正有用的做法
大多数变慢的问题只有一个原因,解决办法是把它找出来,而不是泛泛地释放内存。
- 退出或更新排在列表最前的App。如果是浏览器,关闭忙碌的标签页,或停用背后的扩展。
- macOS更新后,让“聚焦”和“照片”在接通电源的情况下用几个小时完成工作。
- 别用内存清理App,也别用
purge命令。它们清空的文件缓存macOS会马上重建,在重建完成之前Mac反而更慢。如果Mac是因为别的原因变慢,请参阅Mac为什么这么卡。 - 如果退出导致问题的App后内存压力仍然是红色,或者某个进程卡住、“强制退出”也结束不了,就重启。
Vitals能多做什么
Vitals列出的是App而不是进程,并记住每个App用了多少。
- 每个App一行,所有帮助程序都已计入:约60个App,而不是约1,000个进程
- 点按一个浏览器,即可看到它的CPU和内存按标签页、扩展、图形和浏览器本身拆分
- 每个App 30天的CPU和内存数据,可按过去1小时、12或24小时、7或30天排名
- 后台App持续占用CPU、App内存不断增长,或Mac内存不足时,都会发送通知
须知
- CPU可以像活动监视器那样按内核显示,也可以按整台Mac的占比显示,在“设置”→“通用”→“单位”中设置。
- root和系统进程(例如kernel_task和WindowServer)需要打开可选的帮助程序才能测量。
- Vitals不会对进程取样,也不会生成Spindump。活动监视器仍然可以。
常见问题
如何查看Mac的CPU占用?
打开活动监视器,点按“CPU”标签页,按“% CPU”排序。排在前面的就是占用最多的。底部的“系统”、“用户”和“闲置”数值显示整台Mac有多忙。要在“终端”中实时查看,运行top -o cpu。
如何查看每个App占用了多少内存?
打开活动监视器,点按“内存”,按“内存”列排序。选取“显示”→“所有进程,分层显示”,让App的帮助程序排在它下面。活动监视器不会把它们加起来;Vitals会。
Mac什么都没开,为什么内存占用还这么高?
macOS会把最近用过的文件以“已缓存文件”的形式留在内存中,还会为自己保留一部分作为“联动内存”。一旦有App需要,这些内存会立刻让出来。看看“内存压力”:如果是绿色,就没有任何问题。
Mac的CPU占用多少算正常?
空闲时,“CPU”标签页底部的“闲置”通常在90%以上,App和后台任务运行时会短暂冲高。某个App在你没用它时一直排在前面,就值得看一看。
内存压力变黄要紧吗?
本身并不要紧。它表示macOS正在靠压缩内存和使用交换来应付,而Apple silicon很擅长这一点。如果每天平常工作时都是黄色,或者变成了红色,说明以你运行的内容来说,内存不够用。
有没有更简单的方法按App查看Mac的CPU和内存?
Vitals每个App只占一行并已计入帮助程序,所以浏览器或Slack的CPU和内存各只有一个数值,并且会为每个App保留30天的这两项数据。