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



我很清楚以前有人问过这个问题的变体,但我仍然没有找到一个特别好的答案。

我想做的是编写一个Python脚本,该脚本将测量进程及其所有子进程当前的带宽使用情况和上传/下载的总字节数,并在其中任何一个值超过用户定义的阈值时将其杀死。其目的是限制备份客户端的网络使用。

我考虑了几个测量进程带宽的选项:

  • bwmon完全符合我的要求,但令人沮丧的是,它以目前的形式不适合我。问题是,它依赖于从/proc/net/ip_conntrack读取bytes=packets=字段来测量带宽。出于某种原因,这些字段对我来说根本不存在——我怀疑可能是为了做不同的内核版本。

  • 目前,我找到的最可行的解决方案是根据这个建议解析strace -e trace=recvfrom,sendto -p <PID>的输出。然而,这有点混乱,并引发了令人讨厌的权限问题——为了连接到现有进程,我需要sudo strace,并且我更喜欢避免在脚本中使用超级用户权限运行shell命令。

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

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

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

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

全局启用模块和sysctl设置是特定于分发的,但至少在重新启动之前,如果bwmon需要/proc/net/ip_conntrack中的bytespackets,它应该可以工作。

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

最新更新