查出 Mac 上哪个 App 在占网
有东西在占着网,Wi-Fi 图标一直在动,人却没在干什么,热点流量一个下午就烧完,或者一坐下来干活视频通话就开始卡。macOS 能回答这个问题,只是工具散落各处,而且每个工具里最显眼的那个数字都是累计值而不是实时值,人就被带到了错误的进程上。
短答: 活动监视器 的网络标签能给出进程名,但那些列统计的是每个进程启动以来的累计值,要看此刻谁在传数据,用 nettop,要看一个进程在跟哪些远端主机说话,用 lsof -i。
活动监视器 能给出进程名
打开 活动监视器,选 网络 标签,凡是传过数据的进程都会出现,带着已发送和已接收的字节数。
按这些列排序,人才会被带到错误的进程上,它们是每个进程启动以来攒下来的总量,所以上次重启后就一直在跑的守护进程,会压过这一分钟正在把链路打满的那个应用,按「已接收字节」排序,排在最上面的十有八九不是此刻的元凶。
有两行经常把人吓一跳,通常不用管:
- mDNSResponder 负责整台系统的 DNS 和本地网络发现,开机几周的 Mac 上它能显示到 GB 级,它只是其他进程解析名字时的代理,不是自己在后台下载。
- kernel_task 会出现,是因为网络工作会经过内核,同样的误判在 CPU 上的样子见 kernel_task 占用过高。
窗口底部有一张每秒进出流量的实时图,改什么设置的时候该看的是这张图,不是那些列。
Apple 的活动监视器网络指南明确区分了进程启动以来的“接收/发送的数据”和窗口底部实时的“每秒接收/发送的数据”。
nettop 显示此刻谁在传
nettop 才是回答真正那个问题的工具,macOS 自带,不用装。
nettop -P -L 2 -d -J bytes_in,bytes_out
,bytes_in,bytes_out,
syslogd.362,0,22701,
apsd.368,685304,414375,
mDNSResponder.480,4189609493,104188210,
-P 按进程聚合,-L 2 输出两次 CSV 采样,-d 让后一次变成区间增量,-J 只选需要的列。第一份是基线,第二份才是采样期间真正移动的数据。要持续观察就交互运行 nettop -P -d。
lsof -i 显示它连到了哪里
有了名字,下一问通常是数据发到了哪里。
lsof -nP -iTCP -sTCP:ESTABLISHED
-n 跳过反向 DNS,-P 跳过端口名查询,-iTCP 只看 TCP,-sTCP:ESTABLISHED 排除监听和已关闭套接字。普通用户权限通常够用,只有缺少系统进程时才考虑提权。
解析这些地址的时候得老实,属于大型云厂商的 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 2 -d -J bytes_in,bytes_out,它会输出两次采样,读取第二次的区间增量。 - 对涨上去的那个进程跑
lsof -i -n -P,看它连到了哪里。 - 暂停嫌疑应用或同步服务,确认图掉下去。
- 如果流量没下降,还不能排除其他应用或助手进程,继续检查软件更新、iCloud 和其他仍在运行的服务。
第四步是人最容易跳过的,也是鉴定和猜测的分界。
监视器放在哪
Mole 把实时网络吞吐放在菜单栏,挨着 CPU、内存和温度状态,连接忙的时候当场能看见,不用事后再拼,它报自己能测到的吞吐,不会为了声称一份 macOS 本身不提供的按应用历史,去装一个网络过滤器。
常见问题
为什么 mDNSResponder 用了那么多数据?
它给整台系统解析名字、做本地网络发现,很多其他进程的流量就被记在它头上,它自己并没有在下载什么。
能看到某个应用昨天用了多少数据吗?
macOS 看不了,没有内置的按应用历史,提供这个能力的第三方工具会自己装一个网络扩展来观察流量。
热点上网时怎么查是谁在用流量?
到系统设置 > Wi-Fi > 详细信息 里给这个网络打开低数据模式,会停掉包括自动更新下载在内的几项后台服务,剩下的再用上面的 nettop 对比去查。
网络活动高是不是中了恶意软件?
单凭流量高不能判断。先核对更新、同步和备份等常见来源,再看进程归属、连接目的地和暂停后的变化,无法解释的持续流量才需要进一步调查。