排查Mac中的Finder無限卡住的問題

某個週末,Mac突然抽風。Finder卡住,鼠標變成了風火輪一直在轉。除了Finder以外的其它程序可以打開勉強使用,但那些程序打開沒多久也會卡住。用活動監視器也無法讓Finder強制退出;用命令行killall殺掉Finder進程也沒用,它馬上就會重啓然後繼續卡住。重啓系統也沒用。於是Finder就一直這樣處於未響應狀態,進而導致整個系統卡死:


在網上發現不少人遇到這個現象,但是原因和解決方案五花八門。有不少人是因爲安裝了某個第三方軟件導致,但他們所列舉的軟件在我機器上都沒安裝。後來意外發現,新建一個別的賬號並登錄到那個賬號中,問題就會消失。於是當時就刪除了老賬號,用新賬號工作,自以爲解決了這個問題。

但才過一星期,新賬號上也出現了這個問題,而且是在上班時間,嚴重影響了我的工作。於是我決定認真排查下這個問題的起因。

我再次新建了一個別的賬號。在那個賬號中,問題按照預想消失了,所以問題原因肯定和賬戶範圍內的設置和數據有關,而不是系統全局性質的。因此首先考慮刪除用戶目錄下的一些可疑的數據緩存和配置文件。上週出問題的時候我曾按照網上一些文章所說的刪掉了~/Library/Preferences/com.apple.finder.plist,但沒有效果。

有一篇技術博客提到了兩個目錄:~/Library/Caches和~/Library/Saved Application State。其中Saved Application State保存着上次退出系統時各個應用程序的狀態,這其中就包括Finder的狀態。但我把兩個目錄都清空了,依然無用。

繼續在網上搜索,瞭解到Mac有安全模式

重啓進入安全模式,問題竟然消失了!但回到正常模式後,問題又出現。因此可以推測是正常模式下Finder或系統加載了某些模塊導致卡死,而安全模式下因爲沒有加載那些模塊,所以運行正常。

根據蘋果官方文檔的提示,首先懷疑是否有不兼容的登錄項。

於是進入 系統偏好設置 -> 用戶與羣組 -> 登錄項,將所有登錄項全部刪除:

然而還是沒用,問題依舊。看來要以更加技術的手段來分析這個問題。

上文提到的技術博客寫到通過活動監視器查看Finder引用的所有模塊和文件。這是個不錯的思路。

於是我打算按照這個思路進一步深究,看看有哪些文件是Finder在正常模式下會加載,但安全模式下不會加載的。

先以正常模式啓動系統,進入卡住的狀態。趁Finder卡住但活動監視器還未卡住的時候,在活動監視器中選中Finder,然後點擊監視器界面左上角的感嘆號圖標:

在彈出的窗口中點擊“打開的文件和端口”,就能查看某個正在運行的程序所引用的模塊。

如果活動監視器也不幸卡住,可以右鍵單擊Docker上的活動監視器圖標讓其強制退出,然後再次點擊啓動它——還好我平常就將活動監視器駐留在了Docker上。

由於系統卡頓的狀態下截圖困難,所以我用手機將Finder引用的模塊拍了下來。接着重啓Mac進入安全模式,以同樣的步驟記下Finder在安全模式下引用的模塊。一個個比對過去, 我發現在正常模式下加載但安全模式下不加載的模塊並不多,而這類模塊中包含了SIMBL和AFloat,這是最可疑的兩個模塊:

我在安全模式下,在mySIMBL中卸載了AFloat。這次再啓動到正常模式,問題果然沒有再出現!後來我把AFloat再次開啓,問題就又出現了。看來我遇到的Finder卡住的問題就是AFloat的緣故。

從網上看,並不只我一個人遇到過Afloat導致的Finder卡住問題:https://github.com/millenomi/afloat/issues/20

其實我的Mac升級到Sierra後重裝AFloat已經有幾個月了,爲何最近纔出現Finder卡頓的問題,原因仍未知。而且從事後看,AFloat安裝後是對所有賬號都生效的,爲何在剛剛新建的賬號中問題又消失了呢?這裏更具體的原因仍然未清楚,但目前我不打算深究了。

這裏忍不住要吐槽Mac。引用上文提到的技術博客中的話:“這一點上,我想說它連Windows都不如,Windows 不響應了可以結束進程,重新打開後就OK了,它卻進入了無限未響應的循環。”而且一個系統中最常用的軟件竟然會被一個第三方插件卡住主線程,這樣的設計挺糟糕的。

最後還是對此次故障排查的思路做個小結:

  1. 毫無疑問,求助搜索引擎。
  2. 更換賬號(最好新建一個),看問題是系統全局範圍的還是侷限在賬號範圍內。如果問題侷限在賬號範圍內,那麼可以懷疑賬號的緩存和配置文件。
  3. 重啓Mac進入安全模式,看問題是否會消失。如果問題在安全模式下消失,則問題可能出在賬號登錄項,或是問題程序在安全模式下不會加載的模塊中。
  4. 通過活動監視器檢查問題程序所引用的模塊。比對系統在正常模式和安全模式下程序所加載的模塊,找出可疑對象。順便提下,將活動監視器駐留在Dock上有助於在系統卡頓難以操作時以最快速度調出活動監視器以排查問題。
本文在我的獨立博客上的地址:http://zxtechart.com/2017/05/10/mac-finder-stuck/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章