詞彙表/出問題的時候

取樣程序

又稱:為App取樣、程序取樣

簡短回答

「取樣程序」是活動監視器中的工具,會在幾秒鐘內記錄所選程序正在做什麼,並產生一份文字報告,說明它的執行緒把時間花在哪裡。開發者會用這些報告找出App為什麼變慢、忙碌或沒有回應。

Apple的說明是,「取樣程序」會為所選程序產生一份為時3秒的報告。報告會列出每個執行緒和它正在執行的函式,並以次數顯示每個函式出現的頻率。

你不需要自己看懂這份報告。當某個App卡住或使用大量CPU,而你想提供開發者具體的資訊時,它最有用。

如何在活動監視器中為程序取樣

選擇該程序,然後按一下視窗上方的「更多」按鈕(三個點),選擇「取樣程序」。你也可以按兩下該程序,在打開的視窗中按一下「取樣」。

報告出現後,你可以把它儲存為文字檔,附加到錯誤回報或支援請求中。

如何在「終端機」中為程序取樣

執行sample <PID> 5為程序取樣5秒。你可以用程序名稱的一部分代替PID。報告會顯示出來並儲存成檔案,完成時會顯示檔案路徑。

如何看懂取樣報告

報告開頭是標頭資訊:程序名稱和PID、路徑、父程序、程式碼類型以及macOS版本。重要的部分緊接在後,位於Call graph底下。

Call graph會列出每個執行緒。主執行緒,也就是處理點按和按鍵的那個執行緒,標示為com.apple.main-thread。在每個執行緒底下,函式會以縮排表示誰呼叫了誰。每行開頭的數字,是取樣時該函式出現在堆疊上的次數。

  • 順著數字最大的那幾行一路往下,找到縮排最深的地方。執行緒大部分的時間就花在那裡。
  • 如果主執行緒最深處的幾行是mach_msg、__psynch_cvwait或__semwait_signal這類等待呼叫,代表執行緒被阻擋,正在等待別的東西。
  • 如果最深處的幾行是App自己的函式,而且次數很大,代表執行緒正忙著工作。
  • 接近結尾的「Sort by top of stack」區段列出最常在執行的函式,是同一份資料的快速摘要。
  • 結尾的Binary Images列表列出了程序中載入的框架和程式庫。

如何在「終端機」中將取樣儲存成檔案

sample指令比活動監視器提供更多控制。它預設取樣10秒,時間長度可以更改。

  1. 從「應用程式」>「工具程式」打開「終端機」。
  2. 用pgrep -lx Safari找出程序ID,把Safari換成程序名稱。
  3. 在問題發生的當下執行sample <PID> 10 -file ~/Desktop/sample.txt。
  4. 打開桌面上的檔案,或把它附加到錯誤回報中。

取樣什麼時候有用,什麼時候沒用

取樣是單一程序的快照。在你已經知道是哪個App出問題時使用。

  • 有用:某個App當住、某個程序的「% CPU」一直很高,或某個App在一項可以重複的操作上很慢。
  • 用處不大:整台Mac都很慢,而你不知道原因。這種情況比較適合用涵蓋所有程序的spindump。
  • 沒用:問題已經過去了。取樣只能顯示它執行期間發生的事。

如何把取樣傳給開發者

單獨一份取樣就有用,但附上一段簡短的說明,開發者處理起來會容易得多。

  1. 在App當住或忙碌時取樣,而不是等它恢復之後。
  2. 把報告儲存成文字檔,而不是只拷貝其中一部分。開發者需要完整的Call graph和Binary Images列表。
  3. 寫下問題開始時你正在做什麼,例如打開了哪個檔案、按了哪個按鈕。
  4. 註明App的版本和你的macOS版本。報告標頭中的Version和OS Version也會列出這兩項。
  5. 透過App的支援頁面或錯誤追蹤系統傳送;如果是Apple的App,就透過「意見回饋助理」傳給Apple。

大家常問的問題

活動監視器中的「取樣程序」有什麼用途?

它會記錄程序大約3秒內在做什麼,並顯示一份報告,列出它的執行緒以及這些執行緒正在執行的程式碼。開發者用它來診斷沒有回應和CPU使用率過高的問題。

為程序取樣安全嗎?

安全。取樣只是觀察這個程序,不會改變或停止它。

什麼時候應該為程序取樣?

在問題發生的當下取樣,例如App當住或使用大量CPU的時候。等它恢復後才取樣,就看不出原因了。

「取樣程序」需要多久時間?

在活動監視器中,它會記錄大約3秒。「終端機」中的sample指令預設記錄10秒,也可以依你指定的秒數記錄。

取樣報告中有個人資訊嗎?

它包含程序名稱、檔案路徑和載入的程式庫,而路徑中可能包含你的使用者名稱。在任何公開的地方張貼之前,請先讀過一遍。

為什麼取樣中顯示的是問號而不是函式名稱?

App的那些部分沒有可用的符號名稱。開發者仍然可以把位址對應到自己的程式碼,所以直接傳送原始報告即可。

相關詞條

想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。