找出是哪個 App 在使用你的 Mac 網路
有東西在用網路。你什麼都沒做,Wi-Fi 指示燈卻一直在動,用手機熱點一個下午就把額度燒光,或是每次坐下工作,視訊通話就開始卡。macOS 能回答這個問題,但工具散落各處,而且每個工具最顯眼的數字都是累計值而不是即時流量,於是大家常常抓錯程式。
簡短答案: 活動監視器的「網路」分頁會標出程式名稱,但欄位統計的是每個程式啟動後的累計流量。要看此刻在傳資料的是誰,用 nettop。要看某個程式連到哪些遠端主機,用 lsof -i。
活動監視器會標出程式名稱
打開活動監視器,選 網路 分頁。每個傳過資料的程式都會列出已傳送與已接收的位元組。
依這些欄位排序,就是大家抓錯程式的原因。它們是各程式啟動後一路累加的總量,所以從上次重新開機就一直跑的常駐程式,會排在此刻佔滿頻寬的 App 前面。依「已接收位元組」排序,幾乎一定把錯的東西排到最上面。
有兩列常讓人緊張,通常不必:
- mDNSResponder 負責整個系統的 DNS 與區域網路探索。Mac 開機好幾週後,它可能顯示數 GB。它只是其他程式解析名稱時的代理,不是自己在背景下載的 App。
- kernel_task 會出現,是因為網路工作會經過核心。同樣的誤判也發生在 CPU 上,見 kernel_task CPU 占用過高。
視窗底部有每秒傳入與傳出的即時圖表。改動什麼時該盯的是這張圖,不是上面的欄位。
nettop 顯示此刻誰在傳資料
nettop 才是能回答真正問題的工具。它隨 macOS 附帶,不必另外安裝。
nettop -P -L 1 -J bytes_in,bytes_out
,bytes_in,bytes_out,
syslogd.362,0,22701,
apsd.368,685304,414375,
mDNSResponder.480,4189609493,104188210,
-P 依程式彙總,而不是依連線,-L 1 只取一次樣本就結束,不會進入互動模式,-J 用來選欄位。拿掉 -L 以互動方式執行,畫面會就地重新整理,追查時該用這個模式。
要看增量而不是總量,隔幾秒取兩次樣本再比較。兩次之間多了數十 MB 的程式,才是該查的對象。總量很大、兩次樣本卻沒變的,只是閒置的歷史紀錄。
lsof -i 顯示它連到哪裡
有了名稱之後,下一個問題通常是資料送到哪裡。
sudo lsof -i -n -P | grep ESTABLISHED
-n 略過反向 DNS,-P 略過連接埠名稱查詢,輸出會又快又直白。你會看到每個已開啟連線的程式、本機連接埠與遠端位址。不加 sudo 只能看到自己的程式,通常也夠用。
解析這些位址時要老實面對:屬於大型雲端業者的 IP 幾乎說明不了什麼,因為大半個網際網路都託管在那裡。把它當線索,不要當成指認。
常見原因
先別急著認定出事了,檢查那些本來就會在沒人要求時使用網路的東西。
| 原因 | 怎麼辨認 | 在哪裡控制 |
|---|---|---|
| iCloud 照片同步 | 匯入照片後持續上傳 | 照片 > 設定 > iCloud |
| iCloud 雲碟 | 大型檔案變更後出現活動 | 系統設定 > Apple 帳號 > iCloud |
| macOS 或 App Store 更新 | softwareupdated、appstoreagent |
系統設定 > 一般 > 軟體更新 |
| 第三方同步用戶端 | Dropbox、Google Drive、OneDrive 的輔助程式 | App 自己的偏好設定 |
| 備份軟體 | 按排程長時間穩定上傳 | 備份 App 本身 |
| 瀏覽器分頁 | 影片、卡住的上傳、自動播放的頁面 | Chrome 的工作管理員、Safari 的活動視窗 |
軟體更新值得特別提,因為它預設會在背景下載,完整的 macOS 安裝程式有好幾 GB。在計量連線上,常常就是這一個設定在搞鬼。
macOS 不會告訴你的事
三個限制,因為不少熱門文章會略過:
- 沒有內建的各 App 頻寬歷史。 活動監視器和
nettop都只從程式啟動,或從你開始監看的那一刻起算。macOS 裡沒有一份事後能查的各 App 紀錄。 - 各程式的總量不是各 App 的總量。 瀏覽器會把流量分散到多個轉譯程式,一個輔助常駐程式也可能同時承載好幾個 App 的流量。
- 經過 VPN 或系統延伸功能的流量,可能被算在延伸功能頭上,而不是產生流量的那個 App。
宣稱能完整拆出各 App 歷史流量的工具,要嘛自己裝了網路過濾器,要嘛是在估算,相信那個數字之前,先弄清楚是哪一種。
一套可重複的檢查
- 看活動監視器「網路」分頁底部的即時圖表,不要看欄位。
- 隔幾秒取兩次
nettop -P -L 1樣本,再比對差異。 - 對流量增加的那個程式執行
lsof -i -n -P,看它連到哪裡。 - 暫停嫌疑 App 或同步服務,確認圖表掉下來。
- 如果什麼都沒掉,流量不是來自使用者 App;去查軟體更新和 iCloud。
第四步是大家會跳過的,也是辨認與猜測的分界。
監視工具適合放在哪
Mole 把即時網路吞吐量放在選單列,跟 CPU、記憶體、溫度狀態排在一起,連線忙碌時當下就看得到,不必事後重建。它回報自己量得到的吞吐量,不會為了宣稱一份 macOS 根本沒有的各 App 歷史,去安裝網路過濾器。
常見問題
為什麼 mDNSResponder 用掉這麼多資料?
它為整個系統解析名稱並處理區域網路探索,所以許多其他程式的流量會算在它頭上。它自己並沒有在下載東西。
能看到某個 App 昨天用了多少資料嗎?
macOS 本身不行。沒有內建的各 App 歷史。提供這項功能的第三方工具會安裝網路延伸功能,自己觀察流量。
用熱點時怎麼找出誰在吃流量?
在系統設定 > Wi-Fi > 詳細資訊 為該網路開啟低資料用量模式,這會停掉包含自動更新下載在內的多項背景服務,剩下的再用上面的 nettop 比對法查。
網路活動偏高代表有惡意軟體嗎?
很少是第一個跡象,上面那些常見原因幾乎涵蓋所有情況。先把它們過一遍,再把穩定的背景流量當成可疑。