IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何从Linux系统中获取带宽、流量网络数据

IPCPU--网络之路 2016-02-11 22:53:23 累计浏览 2,756 次
本机暂存

引入

国外的云主机厂商,例如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容器,也可以使用这种方法来获取网络数据。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  2. 我的 RHCA 之路 (累计阅读 14,014)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,232)
  4. 给程序员新手的一些建议 (累计阅读 13,091)
  5. Linux 性能监控、测试、优化工具 (累计阅读 13,013)
  6. 关于linux内存free的一些事情 (累计阅读 12,872)
  7. ps - 按进程消耗内存多少排序 (累计阅读 12,691)
  8. Google怎么用linux (累计阅读 12,583)
  9. Linux Used内存到底哪里去了? (累计阅读 11,868)
  10. find命令的一点注意事项 (累计阅读 11,868)