2012-08-24 43 views
0

我很清楚这个问题的变种之前已经被问过,但我还没有找到一个特别好的答案。跟踪进程及其子进程使用的网络带宽

我试图做的是写一个Python脚本,将测量电流带宽使用,总上传的字节数/通过下载的过程和它的所有孩子,如果任何一个值超过杀死它定义的用户,阈。其目的是限制备份客户端的网络使用。

我已经考虑了几个选项,用于测量过程带宽:

  • bwmon正是我想要的,但令人沮丧的它不会在目前的形式为我工作。问题在于它依靠读取/proc/net/ip_conntrackbytes=packets=字段来测量带宽。由于某些原因,这些字段对我来说根本不存在 - 我怀疑它可能是做不同的内核版本。

  • 目前我找到的最可行的解决方案是根据this suggestion解析strace -e trace=recvfrom,sendto -p <PID>的输出。但是,这有点麻烦,并引发了令人讨厌的权限问题 - 为了附加到现有流程,我需要sudo strace,并且我宁愿避免在脚本中使用超级用户特权运行shell命令。

我想知道有没有人有更优雅的建议?

我不是很熟悉/proc的内容,但是如果有其他日志文件会列出数据包的大小和数量,那么我可以修改bwmon来代替它。

回答

3

不是编程相关的答案,但:尝试这样做:

sudo modprobe ip_conntrack 
sysctl -w net.netfilter.nf_conntrack_acct=1 

启用模块的sysctl统一设置为特定的分布,但至少直到你重新启动,bwmon应该如果需要bytes工作和/proc/net/ip_conntrack中的packets

基于http://ubuntuforums.org/showthread.php?t=2046187http://forums.gentoo.org/viewtopic-p-6677939.html(从而最终在谷歌上)。

+0

不错,这似乎有诀窍:现在'/ proc/net/ip_conntrack'报告'bytes ='和'packets =',现在'bwmon'似乎工作正常! 对于任何可能感兴趣的人,我在'/ etc/modules'中添加了'ip_conntrack',以便在启动时加载'net.netfilter.nf_conntrack_acct = 1'到'/ etc/sysctl。 conf'来记录数据包大小并持续计数。 –