我如何知道哪个应用程序正在使用网络?


9

偶尔使用Mac时,我会发现互联网连接速度变慢。使用Activity Monitor,我可以看到这是因为某些东西正在以我的连接可以支持的全速下载数据---但我不知道如何知道是什么原因。这可能是由几种不同的情况造成的(Dropbox同步;一些应用程序进行了自动更新;最近一次是我忘记了的浏览器选项卡中的视频缓冲),因此很容易找到一种方法哪个应用负责网络使用。在OS X中有可能发生这种情况吗?理想情况下,我正在寻找免费的解决方案。(命令行是可以的。)如果可以,我将使用Snow Leopard。

Answers:


6

您可以尝试以下dtrace一种方法:

sudo dtrace -n 'syscall::recvfrom:return { @[pid,execname] = sum(arg0); }'

让它运行一段时间,然后按Control-C。它将打印从套接字读取的,在进程之间分配的字节数的摘要。有关更详细的视图,请替换sumquantize。或者只是为了查看套接字读取次数,请替换sumcount

免责声明:我仅在Lion上尝试过此方法,但AFAIK在SL和Lion之间的dtrace-ability方面未发生重大变化。


1
非常感谢!简单有效,完全满足我的需求。在Snow Leopard上工作正常。
纳撒尼尔(Nathaniel)2012年

...尽管实际上,使用“和”数字看起来有些奇怪-Google Chrome浏览器通常会得到负数字(!)。但是使用量化看起来很明智。
纳撒尼尔(Nathaniel)2012年

负数,对吧?也许是溢出的情况。或者,如果您得到小的负数,请记住,如果发生错误,系统调用将返回-1。如果溢出,我猜测运行64位内核不会发生这种情况。
Harald Hanche-Olsen

它们是中等大小的负数。以下是典型的输出(在Chrome中重新加载此页面时获取):250 Google Chrome -159;39 KernelEventAgen 1; 19个mDNSResponder 2240;但我可能只是误解了它们-当我使用“ quanitze”时,会有一个“值”列,该列可以带有负值,而“计数”列。看起来sum命令报告(value)*(count)之和。负值可能意味着传入的数据包,还是其他?
纳撒尼尔(Nathaniel)2012年

不,这全部与传入数据有关……我猜想chrome会通过在套接字中设置较短超时的情况下调用recvfrom来调用频繁轮询,在这种情况下,如果没有数据,则返回值-1。参见手册页获取信息。
哈拉德·汉彻·奥尔森

6

防火墙

您可以使用Little SnitchHandsOff。它们是出色的防火墙,并且都具有“网络监视器”功能,可以完成此任务:

Little Snitch包含一个网络监视器,显示所有传入和传出网络流量的详细信息。
菜单栏中的状态图标提供了当前网络活动的摘要,并在出现新的交通事件时自动弹出带有更全面信息的监视窗口。

Hands Off是一种用于监视和控制应用程序对网络和磁盘的访问的应用程序。能够监视通常不会引起注意的活动,使您能够就私人信息的传输做出明智的决定,从而避免了机密信息的泄漏。

在此处输入图片说明 在此处输入图片说明

网络监控器:Little Snitch(左),HandsOff(右)

网通

nettop是免费的内置cli解决方案(不幸的是,它不包含在Snow Leopard中)。nettop按程序和端口对流量进行分组,并测量各种网络统计信息。

其他

很少有其他程序可以捕获和测量流量(iftopwireharktcpdump),但是它们不知道起源的pid。要建立连接,您应该使用netstat


谢谢!我已对问题进行了编辑,以表明我理想上是在寻找免费的解决方案(30欧元对于我偶尔会用的东西来说实在太多了),但是如果没有免费的解决方案,那么我会会接受这个答案。
纳撒尼尔(Nathaniel)2012年

对不起这是我的错。我将尝试找到免费的替代方法,并将更新我的答案。
mspasov 2012年

哈!nettop对我来说是新的。看起来很方便。
哈拉德·汉彻·奥尔森

如果可能的话,我也会接受这个答案。如果我升级到Lion,看起来nettop真的很方便。
纳撒尼尔(Nathaniel)2012年

4
sudo fs_usage -f network

将为您提供所有应用程序(和进程)的所有网络访问权限。通常,创建大量流量的过程是最常出现在输出中的过程。


1
谢谢,这真的很有用。这个问题的有用答案给我留下了深刻的印象。
纳撒尼尔(Nathaniel)2012年

1

“ DTrace书”具有一个脚本soconnect.d,可以执行此操作。

复制“ Mac OS X”版本,将其粘贴到文本文件中,然后使用从终端运行它sudo dtrace -s soconnect.d


但是,这不能使您了解进程收到的网络通信量吗?据我所知,它仅跟踪连接。
Harald Hanche-Olsen

1

从10.9开始,活动监视器还具有用于接收和发送字节的列:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.