如何在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 文件在据我所知,Linux 没有提供替代 pcap 的接口来计算网络使用情况。 /proc/<PID>/stat(us)
包含各种进程信息,但没有关于网络访问的信息,只有包括磁盘访问在内的总 I/O 使用情况。
同样,要知道端口,您至少必须读取 IP 标头。因此,我认为不可能显着加快速度,因为分析用户空间中的所有数据包总是很慢。这个任务的内核模块似乎是唯一的选择。
【讨论】:
你的意思是我必须为内核编写补丁?但我的用户不允许我这样做 当然,您不必这样做。但你问的是一个快速的解决方案。以上是关于如何在linux中获取进程或端口网络带宽使用情况的主要内容,如果未能解决你的问题,请参考以下文章