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

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

【问题讨论】:

    标签: linux networking process port flow


    【解决方案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 标头。因此,我认为不可能显着加快速度,因为分析用户空间中的所有数据包总是很慢。这个任务的内核模块似乎是唯一的选择。

    【讨论】:

    • 你的意思是我必须为内核编写补丁?但我的用户不允许我这样做
    • 当然,您不必这样做。但你问的是一个快速的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多