是否有工具可以监视单个进程的带宽使用情况?


15

我找到了一个不错的监视器,它使我可以记录单个进程的各种运行时数据。我正在寻找对带宽使用量相同的等效物。理想情况下,命令应类似于bwmon --pid 1 --log init.log。有这样吗?可以在没有管理员权限的情况下运行吗?



Answers:


3

可以帮助您入门的内容(以防万一您想自己写):

#!/bin/bash
#
# usage: bwmon PID

IN=0; OUT=0; TIME=0

get_traffic() {
    t=`awk '/eth0:/ { printf("%s,%d,%d\n",strftime("%s"),$2,$10); }' < /proc/$1/net/dev`
    IN=${t#*,}; IN=${IN%,*}
    OUT=${t##*,};
    TIME=${t%%,*};
}

get_traffic $1
while true
do
    _IN=$IN; _OUT=$OUT; _TIME=$TIME
    get_traffic $1
    echo "$TIME,$(( $TIME - $_TIME )),$IN,$(( $IN - $_IN )),$OUT,$(( $OUT - $_OUT))"
    sleep 1
done

注释:

  • 仅检查eth0
  • 每1秒检查一次
  • 仅在linux下工作,而其他unix工作类似(procfs或其他)
  • 输出可以存储到sqlite.db与 stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3

11
我不认为这实际上是每个进程的计数器。从过程的角度来看,我认为这只是接口总数。我nc在本地主机上运行了一个客户机/服务器对,每秒发送一个字节,然后进行监视/proc/<listening-nc-pid>/net/dev。然后我又跑了第二nc对,以最大的速度发送。我正在看的文件很明显地计算了第二对数据以及第一对数据。在Linux 2.6.32上运行。
詹德

我有一个错误function strftime never defined; 它是通过安装gawk修复的。
tshepang 2011年

4
@Jander这是正确的,/proc/<pid>/net/dev并且/proc/net/dev在这里有相同的内容。因此,scipt仅报告eth0的流量,而不报告给定进程的流量。
scai 2012年

1
确认这不是答案。eth0如过程所示,它测量的接口计数器。它并不能指望通过该接口由进程发送数据。
纳文

@Navin答案是任何试图回答该问题的东西。一个错误的答案仍然是一个答案。如果这是错误的,那么您可以否决它,但这仍然是一个答案。
terdon

6

如果您对使用的常规I / O带宽感到满意(或者您的程序几乎完全完成了网络I / O),则可以观看该/proc/<pid>/io文件。您需要rcharwchar字段。您可能要减去read_byteswrite_bytes,因为它们代表对存储层的读取和写入。请参阅http://www.kernel.org/doc/Documentation/filesystems/proc.txt的 3.3节。

如果您需要更高的分辨率...。您可以使用lsof和编写此脚本strace,尽管要使所有极端情况都变得很痛苦。其基本思想是解析的输出strace -p <pid>,抓住了第一个参数(=文件描述符)和返回值(=字节数)read()write()send(),和recv()电话(注:有几个系统调用来监听,我的天堂” t追踪了他们全部)。丢弃负值;它们指示错误。使用lsof -p <pid>找出哪些文件描述符是TCP / UDP套接字,每FD加起来计数。只要您拥有要检查的流程,该策略就不需要root权限,但是编写起来确实很麻烦,更不用说编写得很好了。


3

尝试nethogs

NetHogs是一个小的“ net top”工具。它没有像大多数工具一样按协议或每个子网划分流量,而是按进程对带宽进行分组。NetHogs不依赖于特殊的内核模块来加载。如果突然有大量网络流量,您可以启动NetHogs并立即查看引起此问题的PID。这样可以很容易地识别出已经变得疯狂并突然占用您带宽的程序。

2
可悲的是,它无法监视单个进程,也无法记录日志。第二个要求(记录)比第一个要求重要得多。哦,没有管理员权限它就无法运行:(
tshepang 2011年

1
您几乎肯定会需要root特权。
法尔玛里

您可以尝试将Nethogs与-t标志一起使用(tracemode)。然后将得到的输出可以被解析以提取你感兴趣的单个进程的流量。
瓦莱里奥Schiavoni大道
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.