引入

国外的云主机厂商,例如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. javascript算法挑战

    1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...

  2. android后台截屏实现(3)--编译screencap

    修改好之后就要编译了,screencap的编译是要在源码环境中进行的. 将修改后的screencap.cpp文件替换源码中的原始文件,然后修改screencap的Android.mk文件,修改后的文件 ...

  3. hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值

    1.日期: @Temporal(TemporalType.DATE) @Column(name = "applyDate", nullable = false, length = ...

  4. javax.security.auth.login.LoginException: Error during resolve 异常

    登陆TIM时本地抛此异常,测试环境正常 需要重启测试环境机器以后,本地才可以登陆成功 求大神帮忙解决: INFO: Client code attempting to load security co ...

  5. mysql安装出现error Nr.1045

    我们在windows下安装mysql时会出现Access denied for user 'root'@localhost'(using password:No)的问题,这个问题是因为你的机器上之前安 ...

  6. EasyInvoice 简介

    注:本文首发于博客园 EasyInvoice 简介,转载请保留本链接 EasyInvoice(简称 EI) 是一款专门为网上卖家量身打造的管理进销存的软件. 1. 简介 解决卖家日常经营中一直存在的商 ...

  7. HID Boot device.

    整理这篇文章的目的: 客户会有用到遥控器部分(遥控器操作flow:当按下某个键时,MCU会透过UR送command给TP,TP吃到后再透过微软标准的keyboard上报) 要求:在BIOS设定阶段,遥 ...

  8. sys--system-sysdba-sysoper用户区别

    当Oracle 数据库安装完毕后,系统会自动创建sys和system这两个帐户.1.sys :缺省密码为CHANGE_ON_INSTALL ,且被授予DBA角色system :缺省密码为MANAGER ...

  9. JavaScript中函数参数的按值传递与按引用传递(即按地址传递)

    首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...

  10. vb.net转换为C#方法

    第一个方法是上面有人说过的,用VB.NET TO C#的在线转换工具.既然你说不好用,那么可以这样:你把VB.NET代码编译了,然后用工具反编译(IL spy,reflector等)成C#代码.