您现在的位置是:首页 >学无止境 >Linux实时监控网卡入流量和出流量(iftop、dstat、nethogs、nload)网站首页学无止境

Linux实时监控网卡入流量和出流量(iftop、dstat、nethogs、nload)

刘大大__ 2024-06-17 11:19:09
简介Linux实时监控网卡入流量和出流量(iftop、dstat、nethogs、nload)

背景

相同配置和相同业务的4台cvm,今天准备下线,检查还有没有业务流量的时候,发现有两台流量不符合预期,就很奇怪,想知道流量是从哪里来的。记录下当时定位思路
在这里插入图片描述
在这里插入图片描述


先来了解下基本的概念

一、Mbps、kbps、bps、bit、b

速度单位,bit 即比特,通常用 b(小写)表示,指一位二进制位;

  • Mbps 即 Milionbit pro second(百万位每秒);
  • Kbps 即 Kilobit pro second(千位每秒);
  • bps 即 bit pro second(位每秒);

单位换算:
1Milionbit=1000Kilobit=1000000bit
1Mbps=1000 000bps

这是通常用来衡量带宽的单位,指每秒钟传输的二进制位数;


二、MB、KB、B

通常软件上显示的速度不是上述一中的带宽,而是指每秒种传输的字节数(Byte)通常用B(大写)表示;

  • MB 即百万字节也称兆字节;
  • KB 即千字节;
  • B 即字节;

单位换算:
1MB=1024KB=10241024B=10241024*8b
1B=8b;
与带宽的换算:

1M带宽即指 1Mbps=1000Kbps=1000/8KBps=125KBps;

因此1M的带宽下载的速度一般不会超过125KB每秒。

2M、3M带宽分别是250KBps、375KBps;

2M、3M带宽的下载速度分别不会超过250KB、375KB每秒。

PS

1Mbps与 1m/s 是有区别的,1Mbps指的是1000/8KB/S也就是125KB/S,而 1m/s 指的是是1024KB/S。

记住 K 和 k 是没区别的 ,区别在于 bps 属于位每秒的单位,而m/s,KB/S 这两个属于字节每秒的单位,一字节等于8位,即1B=8b


好了,进入正题

1、首先我们先使用neatest 查看监听了哪些进程,由于是生产环境,这里就不截图展示了

netstat -anltp

执行后发现连接数很少,基本上可以确认应该没啥业务流量了,但是为了保险起见,我们应该对业务监听的端口进行抓包看看(这里以nginx为例)

tcpdump -iany dst port '80 or 443' and dst host '输入自己的ip' -nnv

这里没有输出,证明我们猜想是正确的,确实没有业务流量了

2、使用dstat命令实时查看网卡流量

dstat -tnf 10

PS:dstat命令默认显示的是速度单位,而不是存储单位。例如,dstat -tnf命令的输出中,k和b单位分别表示千字节和字节的速度,而不是存储容量。从下面这张图仔细的小伙伴肯定有疑问,为什么这里的send平均在1500k怎么和上面第二张图的10M不相等呢?
在这里插入图片描述
原因:这就是Mb/s和MB/s的区别啦。dstat表示的单位是字节每秒,但是Mb/s表示的是位每秒,通过上面的换算,其实是一样的,只是单位不同而已。

从这里看到确实流量有这么高,进一步查看

3、使用iftop命令

iftop是一个实时流量监控工具,可以用来监控网络接口的流量。要监控某个进程的流量,你可以使用以下命令:

sudo iftop -i eth0 -f "src port <port> or dst port <port>"

但是这里我们并不知道端口,所以执行

iftop -i eth1

在这里插入图片描述
从这里就可以确认到是哪一个目的ip了,如果再结合到neatest 命令就可以确认到是哪一个进程。

4、使用nethogs命令

nethogs -a -d 10

在这里插入图片描述
从这里可以查看到某个进程对应的所有流量了。

扩展
使用nload命令也可以实时监控入流量和出流量
使用lsof -i:port 根据端口查询进程

nload eth1

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。