同事抱怨他的 MacBook Pro 很慢, 開啟網頁常常都要等很久, 本來是以為網路慢或網頁開太多才會感覺到慢, 遠端連線之後才發現 CPU 資源都被 ReportCrash 程序吃掉, 而且就算把 ReportCrash 程序用 kill 指令終止, 該程序還是會不停的啟動, 因此懷疑是否有甚麼自動啟動的服務執行錯誤, 導致 launchd 重複啟動的過程下, 不停地驅動 ReportCrash 程序所導致。
診斷方式
- 終止 ReportCrash 程序, 釋放其所占用的 CPU 資源, 方便進行除錯。
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
- 觀察 /var/log/system.log 中是否有不停反覆被啟動的服務。
- 移除該服務。
- 啟動 ReportCrash 程序,若是依然會不停被啟動占用 CPU 資源,則回到步驟 1.
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
- 檢視被移除的服務, 若為必要使用的功能, 則前往該服務的來源網站, 檢查是否有後續更新版本可以使用。
處理結果
此次診斷同事的 MBP 發現不停被啟動的服務, 都是政府官方憑證常駐程式所引發, 包含了健保卡認證服務、 自然人憑證認證服務、 工商管理憑證認證服務, 還有一些銀行網路 ATM 服務等。 這些服務常駐程式, 被 launchd 啟動不久就因為執行錯誤結束, 因而驅動了 CrashReport 程序, 接著 launchd 又會嘗試再次啟動該服務, 因此就進入這種啟動服務、 服務崩潰 、 CrashReport 被驅動的反覆循環中,造成 CPU 資源耗用居高不下, 導致平常的功能搶不到 CPU 資源而感覺到系統卡卡的。
將這些服務通通移除之後, MBP 就恢復正常了。 至於同事會不會用到被移除的服務呢? 我想等到需要用到的時候, 那些服務的網頁就會提示同事進行相關服務元件的安裝了, 有問題應該還是會回頭來找我才是。