未測量的程序
又稱:為什麼列表加起來不等於總數
簡短回答
系統監控工具中各程序的數值,很少能加起來等於圖表中的總數。在活動監視器中,原因是每個核心都算作100%,而且兩次取樣之間的工作會被漏掉。在其他監控工具中,另一個原因是macOS只允許App測量屬於你這個使用者的程序,所以除非有輔助程式去讀取,否則WindowServer和kernel_task這類系統程序會一直空白。
這裡其實有兩件不同的事,分開來看會比較清楚。第一件是算術:活動監視器的「% CPU」欄是一個核心的比例,所以在8核心的Mac上,這一欄加起來可以達到800%,而底部的圖表顯示的是整台機器的百分比。除以核心數,兩者就對得起來了,頂多差在兩次取樣之間啟動又結束的程序。
第二件是權限。關於某個程序的詳細資訊,例如CPU時間、記憶體、磁碟和網路流量,macOS只會回答擁有它的使用者或root。活動監視器是Apple的App,它透過能看到一切的系統服務來讀取。第三方監控工具是以你的身分執行,所以root或系統帳號擁有的程序(也就是列表頂端的大部分程序)什麼都不會回報,App的總和也就比Mac的總數少。
如何讓活動監視器的數字對得起來
將「CPU」標籤頁依「% CPU」排序,把最上面幾列加起來:在忙碌的Mac上,很快就會超過100%。接著看看列表下方的「系統」和「使用者」數值,它們是整台Mac的比例。欄位是以單一核心計算,摘要則是以整台Mac計算,兩者之間的比值就是你的核心數。
剩下的差距來自時間點。活動監視器預設每五秒取樣一次(「顯示方式」→「更新頻率」)。只執行一秒就結束的程序,例如一道shell指令、一個Spotlight工作程序、一個App啟動後又關閉的輔助程式,都會算進總數,卻從不出現在列表中。
輔助程式的用途,以及為什麼有些監控工具需要它
若要測量不屬於自己的程序,監控工具需要一個小型的特權輔助程式,由macOS在你輸入密碼後安裝,它只回答一個問題:這些程序用了多少資源?輔助程式以root身分執行,所以謹慎的App會讓它保持選用、保持精簡,並清楚說明它讀取哪些內容。
沒有輔助程式時,監控工具誠實的做法是直說:把無法測量的系統程序顯示為空白,計算它們的數量,並註明列表加起來小於總數。沒有輔助程式卻能顯示kernel_task數值的監控工具,是在估算。
大家常問的問題
為什麼活動監視器中的「% CPU」加起來超過100%?
因為每個核心都算作100%。8核心的Mac上,各程序加起來可以顯示800%。列表下方的「系統」、「使用者」和「閒置」數值是整台Mac的比例,所以加起來一定是100%。
為什麼在第三方監控工具中,有些程序不會顯示CPU或記憶體?
macOS只允許App讀取同一使用者所擁有之程序的詳細數值。WindowServer、kernel_task、mds_stores和其他系統程序屬於root或系統帳號,所以除非監控工具有macOS允許讀取它們的輔助程式,否則它們會一直空白。
特權輔助程式安全嗎?
它是以root身分執行的程式,所以信任很重要。行為良好的輔助程式體積小,只讀取程序數值,只在你開啟時安裝,也能從同一個地方移除。啟用之前,先看看App說它會做什麼。
相關詞條
想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。