我很清楚这个问题的变种之前已经被问过,但我还没有找到一个特别好的答案。跟踪进程及其子进程使用的网络带宽
我试图做的是写一个Python脚本,将测量电流带宽使用,总上传的字节数/通过下载的过程和它的所有孩子,如果任何一个值超过杀死它定义的用户,阈。其目的是限制备份客户端的网络使用。
我已经考虑了几个选项,用于测量过程带宽:
bwmon
不正是我想要的,但令人沮丧的它不会在目前的形式为我工作。问题在于它依靠读取/proc/net/ip_conntrack
的bytes=
和packets=
字段来测量带宽。由于某些原因,这些字段对我来说根本不存在 - 我怀疑它可能是做不同的内核版本。目前我找到的最可行的解决方案是根据this suggestion解析
strace -e trace=recvfrom,sendto -p <PID>
的输出。但是,这有点麻烦,并引发了令人讨厌的权限问题 - 为了附加到现有流程,我需要sudo strace
,并且我宁愿避免在脚本中使用超级用户特权运行shell命令。
我想知道有没有人有更优雅的建议?
我不是很熟悉/proc
的内容,但是如果有其他日志文件会列出数据包的大小和数量,那么我可以修改bwmon
来代替它。
不错,这似乎有诀窍:现在'/ proc/net/ip_conntrack'报告'bytes ='和'packets =',现在'bwmon'似乎工作正常! 对于任何可能感兴趣的人,我在'/ etc/modules'中添加了'ip_conntrack',以便在启动时加载'net.netfilter.nf_conntrack_acct = 1'到'/ etc/sysctl。 conf'来记录数据包大小并持续计数。 –