我想获得每个进程的网络带宽使用率。我发现了很多关于此的信息,例如iftop,nethogs,linux process explorer ...... 但是所有这些都通过捕获数据包(libpcap)获得进程品牌宽度使用,通过我在linux中的测试,它消耗了大量的CPU(%10-%15),流速为11MByte / s。如果我可以获得每个端口的流量,我可以解决这个问题,因为我得到了关于使用的进程端口的表。所以我想知道是否有其他方法可以在没有捕获数据包的情况下获得端口流。
答案 0 :(得分:1)
/ proc /“pid”/ net / netstat包含每个进程的带宽信息,其中pid是进程ID。
cat / proc /“pid”/ net / netstat | \ awk'(f == 0){name = $ 1; I = 2;而(i <= NF){n [i] = $ i;我++; F = 1;下一个} \ (f == 1){i = 2; while(i&lt; = NF){printf“%s%s =%d \ n”,name,n [i],$ i;我+ +}; f = 0}'
答案 1 :(得分:0)
据我所知,Linux没有提供pcap的替代接口来计算网络使用情况。 /proc/<PID>/stat(us)
包含各种进程信息,但不涉及网络访问,仅涉及包括磁盘访问在内的总I / O使用情况。
同样,要知道您必须至少读取IP头的端口。因此,我认为不可能显着提高速度,因为分析用户空间中的所有数据包总是很慢。用于此任务的内核模块似乎是唯一的选择。