跟踪进程及其子进程使用的网络带宽

时间:2012-08-24 09:22:25

标签: python linux process network-programming bandwidth

我很清楚之前已经问过这个问题的变体,但我还是没有找到一个特别好的答案。

我要做的是编写一个Python脚本来测量当前带宽使用情况以及进程及其所有子进程上传/下载的总字节数,如果这些值中的任何一个超过用户定义的阈值,则将其终止。其目的是限制备份客户端的网络使用。

我考虑了几种测量过程带宽的方法:

  • bwmon 问题是,它依赖于从bytes=读取packets=/proc/net/ip_conntrack字段来衡量带宽。由于某些原因,这些字段对我来说根本不存在 - 我怀疑它可能是做不同的内核版本。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

全局启用模块和sysctl设置是特定于分发的,但至少在重新启动之前,bwmon应该在bytes中需要packets/proc/net/ip_conntrack时才能正常工作。

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