如何从Linux系统中获取带宽、流量网络数据
引入
国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片:

从上图来看,其取值方式为
每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes)
带宽与流量
我们从上图随便取个点来计算下:
带宽= 单位时间内流量*8 /时间段 /1024/1024 (Mbps)
AWS network in 619581409 对应得带宽为 78.8 Mbps
AWS network out 421092676 对应得带宽为 53.5Mbps
想图个省事,可以直接删掉AWS流量的后面7位数字,就可以得到带宽(Mbps)(误差稍有点大)
Linux中的网络数据提取
在Linux系统中我们可以从/proc 目录里来获取相应的数据并进行处理。
让我们来看下网络相关的/proc/net/dev
cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0: 313568232649602 558303341870 0 0 0 0 0 0 227503770878768 476857419543 0 0 0 0 0 0
lo: 440905770 5512243 0 0 0 0 0 0 440905770 5512243 0 0 0 0 0 0
这个文件是本机所有网卡的数据记录。
从标题可以看出,第一列是网卡名称,第二列是入方向字节数(流量),第三列是入方向数据包数量,第四列是入方向错误包数,第10列是出方向字节数(流量)
脚本计算带宽和流量
有了数据,我们就可以写个shell脚本来获取带宽和流量数据了
脚本getnettraffic.sh
#!/bin/bash
DATE1=`date --utc`
RX1=`cat /proc/net/dev | grep eth0 |awk '{print $2}'`
TX1=`cat /proc/net/dev | grep eth0 |awk '{print $10}'`
sleep60
DATE2=`date --utc`
RX2=`cat /proc/net/dev | grep eth0 |awk '{print $2}'`
TX2=`cat /proc/net/dev | grep eth0 |awk '{print $10}'`
RX=$(( $RX2-$RX1 ))
TX=$(( $TX2-$TX1 ))
RXBAND=$(($RX*8/60/1024/1024))
TXBAND=$(($TX*8/60/1024/1024))
echo "time Range $DATE1 - $DATE2"
echo "Network In Bytes: $RX Bytes"
echo "Network Out Bytes: $TX Bytes"
echo "Network In BW: $RXBAND Mbps"
echo "Network Out BW: $TXBAND Mbps"
执行结果:
time Range Thu Jun 4 05:38:06 UTC 2015 - Thu Jun 4 05:39:06 UTC 2015
Network In Bytes: 628578266 Bytes
Network Out Bytes: 465529561 Bytes
Network In BW: 79 Mbps
Network Out BW: 59 Mbps
扩展
我们已经知道 /proc/net/dev 这个文件存储了主机上的网络数据。但如果我想看某个进程的网络数据怎么办?
同样的Linux也提供了 /proc/$PID/net/dev 这个文件来记录进程的网络数据。
如果主机上运行了虚拟机或者docker容器,也可以使用这种方法来获取网络数据。
如何从Linux系统中获取带宽、流量网络数据的更多相关文章
- linux系统中重启网卡后网络不通(NetworkManager篇)
一.故障现象 RHEL7.6系统,使用nmcli绑定双网卡后,再使用以下命令重启network服务后主机网络异常,导致无法通过ssh远程登录系统. # systemctl restart networ ...
- 在Linux系统中修改IP地址
在Linux系统中,通过编辑网络配置文件,设置系统IP地址,当然要在root权限下执行,具体步骤如下: 1.切换路径到/etc/sysconfig/network-scripts [root@Comp ...
- Linux 系统中僵尸进程
Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...
- 用户管理 之 Linux 系统中的超级权限的控制
在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...
- 获得Unix/Linux系统中的IP、MAC地址等信息
获得Unix/Linux系统中的IP.MAC地址等信息 中高级 | 2010-07-13 16:03 | 分类:①C语言. Unix/Linux. 网络编程 ②手册 | 4,471 次阅读 ...
- Linux系统中的计划任务
在系统的工作管理中,我们经常会有需要去告诉电脑某些特定的时间执行一些操作,比如定时提醒工作人员需要做什么事情,或者在每天凌晨进行文件备份等等.这就需要某些命令来达成计划任务. 计划任务可以大体上分成两 ...
- 【Linux】Linux系统中的权限详解
我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险.所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要. 一.文件基本权限 首先看下linux ...
- 嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】
转自:http://cpbest.blog.163.com/blog/static/41241519201111575726966/ libusb是linux系统中,提供给用户空间访问usb设备的AP ...
- linux系统中的进程状态分析
转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...
随机推荐
- 探究css !important的应用之道
定义及语法: !important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权. 语法格式:{ cssRule !important },即将!important写在定义的最后面, 例如 ...
- MC, MCMC, Gibbs採样 原理&实现(in R)
本文用讲一下指定分布的随机抽样方法:MC(Monte Carlo), MC(Markov Chain), MCMC(Markov Chain Monte Carlo)的基本原理,并用R语言实现了几个样 ...
- JAVA基础1
阶段0:拟出一个计划 阶段1:要制作什么? 阶段2:如何构建? 阶段3:开始创建 阶段4:校订 阶段5:计划的回报 一.程序运行时,数据保存位置 1.寄存器.这是最快的保存区域,因为它位于和其他所 ...
- RPC 实现
PC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Servic ...
- 使用Ksoap2调用Web Service加入SoapHeader
关于这个问题,如果使用百度都是前篇一律的代码,好不容易上了google才找到完整的方法,这里讲所有的代码都贴出来与大家分享. 首先是.NET写的后台代码 /// <summary> /// ...
- Android Studio使用教程(一)
今年的Google全球开发者大会虽然没有新的Android系统和设备,但是还是推出了一些不错的产品,Android Studio就是其中之一.这个基于Intellij IDEA开发的Android I ...
- Python购物车的实现课程
需求: 1.用户输入工资收入 2.打印商品列表 3.用户选择商品,不断的加入购物车 4.检测用户余额,直接捐款,不足提示余额不足 5.允许主动退出,退出时,打印已购商品列表 重点方法: 打印列表下标的 ...
- css行高line-height的用法(转)
本文导读: “行高“指一行文子的高度,具体来说是指两行文子间基线间的距离.在CSS,line-height被用来控制行与行之间的垂直距离.line- height 属性会影响行框的布局.在应用到一个块 ...
- XML中 添加或修改时 xmlns="" 怎么删除
//创建节点时 记得加上 ---> xmldoc.DocumentElement.NamespaceURI XmlElement url = xmldoc.CreateElement(&quo ...
- [c#]asp.net开发微信公众平台(7)前6篇的整体框架demo源码
这里给出的demo是具备整体框架的微信公众平台源码, 所谓demo就是拿过去就可以直接演示使用的东西, 当然不会具备非常详细的具体到业务层面.数据层面的东西, 每个人都可以在此基础上自由发挥, 只 ...