如何在linux中获取进程或端口网络带宽使用情况

Posted

技术标签:

【中文标题】如何在linux中获取进程或端口网络带宽使用情况【英文标题】:How to get process or port Network bandwidth usage in linux 【发布时间】:2014-04-08 19:08:33 【问题描述】:

我想获取每个进程的网络带宽使用情况。找了很多这方面的资料,比如iftop、nethogs、linux process explorer... 但是它们都通过捕获数据包(libpcap)获得进程品牌宽度使用,通过我在linux中的测试它消耗了大量的cpu(%10-%15)并且流的速度为11MByte / s。如果我能获得每个端口的流量,我就可以解决这个问题,因为我已经获得了有关使用的进程端口的表格。所以我想知道有没有其他方法可以在不捕获数据包的情况下获得端口流。

【问题讨论】:

【参考方案1】:

/proc/[pid]/net/netstat 包含每个进程的带宽信息,其中 pid 是进程 ID。

cat /proc/"pid"/net/netstat | \
 awk '(f==0) name=$1; i=2; while ( i<=NF) n[i] = $i; i++ ; f=1; next \
(f==1) i=2; while ( i<=NF) printf "%s%s = %d\n", name, n[i], $i; i++; f=0 '

参考: https://sa-chernomor.livejournal.com/9858.html

【讨论】:

嗨@BusyTraveller,这实际上不是真的。虽然 netstat proc 文件在 文件夹下,但它实际上仍然是系统级别的 netstat 指标,至少基于我在内核版本为 4.15.0-46-generic 的 Ubuntu 16.04 上的测试。 其实这个问题的一个很好的答案可以在这个链接中找到:unix.stackexchange.com/questions/224201/… 这里只携带声明:“/proc/net 包含关于一般网络的统计信息,而 /proc//net/dev 包含从进程的角度来看的网络统计信息。” 如果你拥有的所有进程都在同一个网络命名空间中,那么这些进程的所有计数器都是相同的。【参考方案2】:

据我所知,Linux 没有提供替代 pcap 的接口来计算网络使用情况。 /proc/&lt;PID&gt;/stat(us) 包含各种进程信息,但没有关于网络访问的信息,只有包括磁盘访问在内的总 I/O 使用情况。

同样,要知道端口,您至少必须读取 IP 标头。因此,我认为不可能显着加快速度,因为分析用户空间中的所有数据包总是很慢。这个任务的内核模块似乎是唯一的选择。

【讨论】:

你的意思是我必须为内核编写补丁?但我的用户不允许我这样做 当然,您不必这样做。但你问的是一个快速的解决方案。

以上是关于如何在linux中获取进程或端口网络带宽使用情况的主要内容,如果未能解决你的问题,请参考以下文章

Linux下查看某个进程的网络带宽占用情况

Linux系统如何查看服务器带宽及网络使用情况

Linux系统如何查看服务器带宽及网络使用情况

Linux 或 Windows 上实现端口映射

查看linux网络流量及带宽

如何查看Linux下进程的IO活动状况 00 Hey,Linux