contactsd
又稱:聯絡人同步
簡短回答
contactsd是管理你聯絡人的macOS程序。它負責維護Mac上的聯絡人資料庫、回應每個查詢姓名、號碼或地址的App,並與「Internet帳號」中的帳號搭配運作,讓聯絡人與iCloud、Google、Exchange和其他伺服器保持同步。
讀取你通訊錄的不只有「聯絡人」App。「郵件」用它為寄件人顯示姓名,「訊息」和FaceTime用它顯示來電者,「行事曆」用它填入受邀者,Spotlight則用它尋找聯絡人。這些都會詢問contactsd,所以無論「聯絡人」App有沒有打開,它都會執行。
大部分時間它都處於閒置狀態,幾乎不耗資源。只有真正有工作時它才會忙起來:加入帳號後的第一次同步、大量輸入、轉換資料庫的macOS更新,或某個帳號不斷失敗又重試。最後一種通常就是它連續好幾個小時排在CPU列表前面的原因。
contactsd為什麼使用這麼多CPU
在你加入帳號、輸入vCard檔案或更新macOS之後,短暫飆升是正常的,會自行結束。contactsd正在讀取、合併和索引每一張名片,通訊錄很大時會需要一段時間。
一直不結束的飆升,通常表示某個帳號陷入了循環。contactsd向伺服器要求變更,收到無法處理的回覆,然後再次要求。Google和Exchange帳號比iCloud更常出現這種情況,通常發生在更改密碼、登入授權被撤銷,或伺服器拒絕某個群組或名片之後。數千張重複的名片(通常是同一個帳號被加入了兩次)也會以同樣的方式讓它一直很忙。
如何讓它平靜下來
先找出是哪個帳號。打開「系統設定」→「Internet帳號」,找找看有沒有要求你重新登入的帳號,然後打開「聯絡人」,檢查側邊欄中的帳號是否有警告。如果是某一個帳號的問題,就為它關閉「聯絡人」,等一分鐘後再開啟。contactsd會捨棄該帳號的本機副本並重新下載。
如果看不出是哪個帳號,就為iCloud以外的所有帳號關閉「聯絡人」,看看contactsd是否平靜下來,然後一次加回一個帳號。在活動監視器中結束contactsd只能撐一下:macOS會立刻再次啟動它,同一個帳號很快又會讓它忙起來。
如何判斷contactsd是否卡住了
正常運作的同步會漸漸安靜下來,陷入循環的同步每隔幾分鐘看起來都一樣。活動監視器和「終端機」可以告訴你是哪一種。
- 打開活動監視器,按一下「CPU」標籤頁,然後在搜尋欄位中輸入
contacts。你會看到contactsd,通常還有AddressBookSourceSync,也就是負責與每個帳號的伺服器溝通的輔助程式。 - 觀察「% CPU」幾分鐘。數值逐漸降到零,代表同步快完成了。數值一直居高不下,或是規律地起伏,就是循環。
- 按一下「網路」標籤頁。循環通常會顯示AddressBookSourceSync一再收發少量資料,而不是一次大量下載。
- 想看細節的話,打開「終端機」並執行
log stream --predicate 'process == "contactsd"'。反覆提到同一個帳號或伺服器的錯誤,指的就是需要修正的帳號。按下Control-C即可停止。
contactsd的正常用量與問題
正常:contactsd平時接近零,在「郵件」或「訊息」查詢姓名時短暫活動一下,加入帳號或輸入名片後會運作幾分鐘。macOS更新後,它把資料庫轉換為新格式時,可能會忙得比較久。
值得檢查:它連續好幾個小時都很忙、你什麼都沒做風扇卻轉起來,或「聯絡人」裡同一個人出現兩三次。常見原因如下:
- 某個帳號需要你重新登入,原因是更改了密碼,或App專用密碼被撤銷。
- 同一個Google或Exchange帳號加入了兩次,一次在「Internet帳號」中,一次透過某個App。
- 舊的輸入作業留下數千張重複名片。在「聯絡人」中選擇「名片」→「尋找重複項目」即可合併。
- 工作帳號的伺服器限制了同步頻率,所以每次嘗試都被拒絕,然後再重試。
contactsd把你的聯絡人存放在哪裡
資料庫位於你使用者的「資料庫」檔案夾中的~/Library/Application Support/AddressBook,Sources底下每個帳號各有一個檔案夾。不要為了解決同步問題而手動刪除或編輯它:在「Internet帳號」中為該帳號關閉再開啟「聯絡人」,就能安全地重建該帳號的副本,而只存在你Mac上的聯絡人不會受到影響。
在做任何較大的變更之前,先在「聯絡人」中選擇「檔案」→「輸出」→「聯絡人封存檔」來輸出備份。它會把所有帳號的每張名片存成一個檔案,之後可以再輸入。
大家常問的問題
Mac上的contactsd是什麼?
它是管理你聯絡人的macOS程序:負責維護聯絡人資料庫、回應查詢聯絡人的App,並讓聯絡人與iCloud、Google、Exchange和其他帳號同步。
contactsd的CPU用量為什麼很高?
如果只是短暫的,那是因為加入帳號、輸入資料或macOS更新後,它正在同步或索引。如果持續好幾個小時,那是因為某個帳號不斷失敗又重試,或通訊錄裡充滿重複項目。
contactsd是病毒嗎?
不是。它是macOS的一部分,由launchd以你自己的使用者帳號啟動。你無法移除它,也沒有理由這麼做。
AddressBookSourceSync是什麼?
contactsd用來將每個聯絡人帳號與其伺服器同步的輔助程式。如果它和contactsd一起忙碌,表示你的某個帳號正在同步;兩者之間的循環通常指向單一帳號。
為某個帳號關閉「聯絡人」會刪除我的聯絡人嗎?
它會從你的Mac移除該帳號的副本,而不會從伺服器移除。重新開啟後,聯絡人會再次下載。只儲存在「我的Mac上」的聯絡人不受影響。
相關詞條
想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。