引入

国外的云主机厂商,例如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系统中获取带宽、流量网络数据的更多相关文章

  1. linux系统中重启网卡后网络不通(NetworkManager篇)

    一.故障现象 RHEL7.6系统,使用nmcli绑定双网卡后,再使用以下命令重启network服务后主机网络异常,导致无法通过ssh远程登录系统. # systemctl restart networ ...

  2. 在Linux系统中修改IP地址

    在Linux系统中,通过编辑网络配置文件,设置系统IP地址,当然要在root权限下执行,具体步骤如下: 1.切换路径到/etc/sysconfig/network-scripts [root@Comp ...

  3. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  4. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  5. 获得Unix/Linux系统中的IP、MAC地址等信息

    获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

  6. Linux系统中的计划任务

    在系统的工作管理中,我们经常会有需要去告诉电脑某些特定的时间执行一些操作,比如定时提醒工作人员需要做什么事情,或者在每天凌晨进行文件备份等等.这就需要某些命令来达成计划任务. 计划任务可以大体上分成两 ...

  7. 【Linux】Linux系统中的权限详解

    我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险.所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要. 一.文件基本权限 首先看下linux ...

  8. 嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】

    转自:http://cpbest.blog.163.com/blog/static/41241519201111575726966/ libusb是linux系统中,提供给用户空间访问usb设备的AP ...

  9. linux系统中的进程状态分析

    转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...

随机推荐

  1. jquery 让指定导航隐藏

    $(function(){ var aLink=$('.nav-content .nav li a'); // 选中所有a var aText=['星网服务','在线搭配','星网学院','推客联盟' ...

  2. Java随机数生产算法

    java提供了Math.random()函数,返回一个double类型的随机数,也有util包里的Random类,可以生成double,int,float,long,bytes等随机数. 但有些业务需 ...

  3. POJ 2175 Evacuation Plan (费用流,负环,消圈法,SPFA)

    http://poj.org/problem?id=2175 Evacuation Plan Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  4. mysql索引简单介绍

    索引从本质上来说也是一种表,这样的表存储被列为索引的列项值和指向真正完整记录的指针.索引对用户透明.仅仅被数据库引擎用来加速检索真实记录.有索引的表.insert和update操作会耗费很多其它时间而 ...

  5. Calendar 日历控件使用

    <link rel="stylesheet" href="__STATIC__/js/calendar/calendar-blue.css"/> & ...

  6. .NET基础拾遗(7)多线程开发基础1

    一.多线程编程的基本概念 1.1 操作系统层面的进程和线程 (1)进程 进程代表了操作系统上运行着的一个应用程序.进程拥有自己的程序块,拥有独占的资源和数据且可以被操作系统调度. But,即使是同一个 ...

  7. SQL Server 中创建数据库、更改主文件组示例

    以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...

  8. 设置cas server使用http非安全协议

    目录 1.tomcat添加https安全协议 2.下载cas server端部署到tomcat上 3.CAS服务器深入配置(连接MYSQL) 4.Apache Shiro 集成Cas作为cas cli ...

  9. zepto自定义事件

    <!--测试自定义事件 trigger--> <script> $(function () { var meEvent = $.Event("custom" ...

  10. JqueryUI插件网络连接

    operamasks_UI官网 http://ui.operamasks.org/website/homepage.html EasyUI官网 http://www.jeasyui.com/index ...