查出 Mac 上哪个 App 在占网
有东西在占着网,Wi-Fi 图标一直在动,人却没在干什么,热点流量一个下午就烧完,或者一坐下来干活视频通话就开始卡。macOS 能回答这个问题,只是工具散落各处,而且每个工具里最显眼的那个数字都是累计值而不是实时值,人就被带到了错误的进程上。
短答: 活动监视器 的网络标签能给出进程名,但那些列统计的是每个进程启动以来的累计值,要看此刻谁在传数据,用 nettop,要看一个进程在跟哪些远端主机说话,用 lsof -i。
活动监视器 能给出进程名
打开 活动监视器,选 网络 标签,凡是传过数据的进程都会出现,带着已发送和已接收的字节数。
按这些列排序,人才会被带到错误的进程上,它们是每个进程启动以来攒下来的总量,所以上次重启后就一直在跑的守护进程,会压过这一分钟正在把链路打满的那个应用,按「已接收字节」排序,排在最上面的十有八九不是此刻的元凶。
有两行经常把人吓一跳,通常不用管:
- mDNSResponder 负责整台系统的 DNS 和本地网络发现,开机几周的 Mac 上它能显示到 GB 级,它只是其他进程解析名字时的代理,不是自己在后台下载。
- kernel_task 会出现,是因为网络工作会经过内核,同样的误判在 CPU 上的样子见 kernel_task 占用过高。
窗口底部有一张每秒进出流量的实时图,改什么设置的时候该看的是这张图,不是那些列。
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 Drive | 大文件变动后出现活动 | 系统设置 > Apple 账户 > iCloud |
| macOS 或 App Store 更新 | softwareupdated、appstoreagent |
系统设置 > 通用 > 软件更新 |
| 第三方同步客户端 | Dropbox、Google Drive、OneDrive 的助手进程 | 应用自己的偏好设置 |
| 备份软件 | 按计划长时间稳定上传 | 备份应用本身 |
| 浏览器标签页 | 视频、卡住的上传、自动播放的页面 | Chrome 的任务管理器、Safari 的活动窗口 |
软件更新值得单独说一句,因为它默认后台下载,完整的 macOS 安装包有好几个 GB,在按流量计费的链路上,往往就是这一个设置在作怪。
macOS 不会告诉你的事
三条边界,不少热门文章会跳过:
- 没有内置的按应用带宽历史。 活动监视器 和
nettop报的都是进程启动以来,或开始盯着的那一刻起的数,macOS 里没有任何一份可以事后查阅的按应用记录。 - 按进程的总量不是按应用的总量。 浏览器会把流量摊到多个渲染进程上,一个助手守护进程也可能同时给好几个应用带流量。
- 经过 VPN 或系统扩展的流量,可能记在扩展头上,而不是产生流量的那个应用。
声称能给出完整按应用历史拆分的工具,要么自己装了一个网络过滤器,要么在估算,信那个数字之前,得先知道它是哪一种。
一套可重复的检查
- 看 活动监视器 网络标签底部的实时图,别看那些列。
- 隔几秒采两次
nettop -P -L 1,对比差值。 - 对涨上去的那个进程跑
lsof -i -n -P,看它连到了哪里。 - 暂停嫌疑应用或同步服务,确认图掉下去。
- 如果什么都没掉,流量就不是用户应用来的,去查软件更新和 iCloud。
第四步是人最容易跳过的,也是鉴定和猜测的分界。
监视器放在哪
Mole 把实时网络吞吐放在菜单栏,挨着 CPU、内存和温度状态,连接忙的时候当场能看见,不用事后再拼,它报自己能测到的吞吐,不会为了声称一份 macOS 本身不提供的按应用历史,去装一个网络过滤器。
常见问题
为什么 mDNSResponder 用了那么多数据?
它给整台系统解析名字、做本地网络发现,很多其他进程的流量就被记在它头上,它自己并没有在下载什么。
能看到某个应用昨天用了多少数据吗?
macOS 看不了,没有内置的按应用历史,提供这个能力的第三方工具会自己装一个网络扩展来观察流量。
热点上网时怎么查是谁在用流量?
到系统设置 > Wi-Fi > 详细信息 里给这个网络打开低数据模式,会停掉包括自动更新下载在内的几项后台服务,剩下的再用上面的 nettop 对比去查。
网络活动高是不是中了恶意软件?
很少是第一信号,上面那些常见解释几乎能覆盖所有情况,先走完那些再把稳定的后台流量当成可疑。