术语表/CPU、GPU和能耗

未测量的进程

又称:为什么列表加起来不等于总数

简要回答

系统监控工具中各个进程的数值,很少能加起来等于图表中的总数。在活动监视器中,原因是每个内核都算作100%,而且两次取样之间的工作会被漏掉。在其他监控工具中,另一个原因是macOS只允许App测量属于你这个用户的进程,所以除非有帮助程序去读取,否则WindowServer和kernel_task这类系统进程会保持空白。

这里其实有两件不同的事,把它们分开来看会更清楚。第一件是算术问题:活动监视器的“% CPU”列是一个内核的份额,所以在八核Mac上,这一列加起来可以达到800%,而底部的图表显示的是整台机器的百分比。除以内核数,两者就对得上了,最多相差那些在两次取样之间启动又结束的进程。

第二件是权限问题。关于某个进程的详细信息,比如CPU时间、内存、磁盘和网络流量,macOS只回答拥有它的用户或root。活动监视器是Apple的App,它通过一个能看到一切的系统服务来读取。第三方监控工具以你的身份运行,所以root或系统账户拥有的进程(也就是列表顶部的大部分进程)什么都报告不出来,App的总和也就比Mac的总数少。

如何让活动监视器的数字对得上

给“CPU”标签页按“% CPU”排序,把前几行加起来:在忙碌的Mac上,很快就会超过100%。再看看列表下方的“系统”和“用户”数值,它们是整台Mac的份额。这一列按单个内核计算,而摘要按整台Mac计算,两者的比值就是你的内核数。

剩下的差距来自时间。活动监视器默认每五秒取样一次(“显示”→“更新频率”)。一个只运行一秒就退出的进程,比如一条shell命令、一个“聚焦”工作进程、一个App启动后又关闭的帮助程序,都会计入总数,却从不出现在列表中。

帮助程序是做什么的,为什么有些监控工具需要它

要测量不属于自己的进程,监控工具需要一个小型的特权帮助程序,由macOS在你输入密码后安装,它只回答一个问题:这些进程用了多少资源?帮助程序以root身份运行,所以一个谨慎的App会让它保持可选、保持小巧,并明确说明它读取什么。

没有帮助程序时,监控工具诚实的做法是直说:把无法测量的系统进程显示为空白,统计它们的数量,并注明列表加起来小于总数。没有帮助程序却能给出kernel_task数值的监控工具,是在估算。

常见问题

为什么活动监视器中的“% CPU”加起来超过100%?

因为每个内核都算作100%。八核Mac上各进程加起来可以显示800%。列表下方的“系统”“用户”和“闲置”数值是整台Mac的份额,所以它们加起来总是100%。

为什么在第三方监控工具中,有些进程不显示CPU或内存?

macOS只允许App读取同一用户所拥有进程的详细数据。WindowServer、kernel_task、mds_stores和其他系统进程属于root或系统账户,所以除非监控工具有一个macOS允许它读取这些数据的帮助程序,否则它们会保持空白。

特权帮助程序安全吗?

它是以root身份运行的程序,所以信任很重要。一个规矩的帮助程序体积小,只读取进程数据,只在你打开它时安装,也能在同一个地方移除。启用之前,先看看App说它做什么。

相关条目

想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。