我很清楚之前已经问过这个问题的变体,但我还是没有找到一个特别好的答案。
我要做的是编写一个Python脚本来测量当前带宽使用情况以及进程及其所有子进程上传/下载的总字节数,如果这些值中的任何一个超过用户定义的阈值,则将其终止。其目的是限制备份客户端的网络使用。
我考虑了几种测量过程带宽的方法:
bwmon
问题是,它依赖于从bytes=
读取packets=
和/proc/net/ip_conntrack
字段来衡量带宽。由于某些原因,这些字段对我来说根本不存在 - 我怀疑它可能是做不同的内核版本。
目前,我发现最可行的解决方案是根据this suggestion解析strace -e trace=recvfrom,sendto -p <PID>
的输出。但是,这有点乱,并引发了令人讨厌的权限问题 - 为了附加到我需要sudo strace
的现有进程,我宁愿避免在脚本中运行具有超级用户权限的shell命令。
我想知道是否有人有更优雅的建议?
我对/proc
的内容不太熟悉,但如果有其他日志文件会列出数据包大小和数量,那么我可以修改bwmon
来代替使用它。
答案 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=2046187和http://forums.gentoo.org/viewtopic-p-6677939.html(最终在Google上)。