Linux--查看网络性能指标

一、性能指标有哪些?

  • 带宽,表示链路的最大传输速率,单位是 b/s (比特 / 秒),带宽越大,其传输能力就越强。
  • 延时,表示请求数据包发送后,收到对端响应,所需要的时间延迟。不同的场景有着不同的含义,比如可以表示建立 TCP 连接所需的时间延迟,或一个数据包往返所需的时间延迟。
  • 吞吐率,表示单位时间内成功传输的数据量,单位是 b/s(比特 / 秒)或者 B/s(字节 / 秒),吞吐受带宽限制,带宽越大,吞吐率的上限才可能越高。
  • PPS,全称是 Packet Per Second(包 / 秒),表示以网络包为单位的传输速率,一般用来评估系统对于网络的转发能力。

当然,除了以上这四种基本的指标,还有一些其他常用的性能指标,比如:

  • 网络的可用性,表示网络能否正常通信;
  • 并发连接数,表示 TCP 连接数量;
  • 丢包率,表示所丢失数据包数量占所发送数据组的比率;
  • 重传率,表示重传网络包的比例;


二、查看网络配置

ifconfig 属于 net-tools 软件包,ip 属于 iproute2 软件包,我的印象中 net-tools 软件包没有人继续维护了,而 iproute2 软件包是有开发者依然在维护,所以更推荐你使用 ip 工具。

第一,网口的连接状态标志。其实也就是表示对应的网口是否连接到交换机或路由器等设备,如果 ifconfig 输出中看到有 RUNNING,或者 ip 输出中有 LOWER_UP,则说明物理网络是连通的,如果看不到,则表示网口没有接网线。

第二,MTU 大小。默认值是 1500 字节,其作用主要是限制网络包的大小,如果 IP 层有一个数据报要传,而且网络包的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片,即把数据报分成若干片,这样每一片就都小于 MTU。事实上,每个网络的链路层 MTU 可能会不一样,所以你可能需要调大或者调小 MTU 的数值。

第三,网口的 IP 地址、子网掩码、MAC 地址、网关地址。这些信息必须要配置正确,网络功能才能正常工作。

第四,网络包收发的统计信息。通常有网络收发的字节数、包数、错误数以及丢包情况的信息,如果 TX(发送) 和 RX(接收) 部分中 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,则说明网络发送或者接收出问题了,这些出错统计信息的指标意义如下:

  • errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;
  • dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer(这个缓冲区是在内核内存中,更具体一点是在网卡驱动程序里),但因为系统内存不足等原因而发生的丢包;
  • overruns 表示超限数据包数,即网络接收/发送速度过快,导致 Ring Buffer 中的数据包来不及处理,而导致的丢包,因为过多的数据包挤压在 Ring Buffer,这样 Ring Buffer 很容易就溢出了;
  • carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;
  • collisions 表示冲突、碰撞数据包数;

ifconfigip 命令只显示的是网口的配置以及收发数据包的统计信息,而看不到协议栈里的信息,那接下来就来看看如何查看协议栈里的信息。



三、查看Socket信息

使用 netstat 或者 ss,这两个命令查看 socket、网络协议栈、网口以及路由表的信息。

虽然 netstatss 命令查看的信息都差不多,但是如果在生产环境中要查看这类信息的时候,尽量不要使用 netstat 命令,因为它的性能不好,在系统比较繁忙的情况下,如果频繁使用 netstat 命令则会对性能的开销雪上加霜,所以更推荐你使用性能更好的 ss 命令。

可以发现,输出的内容都差不多, 比如都包含了 socket 的状态(State )、接收队列(Recv-Q )、发送队列(Send-Q )、本地地址(Local Address )、远端地址(Foreign Address )、进程 PID 和进程名称(PID/Program name)等。

接收队列(Recv-Q )和发送队列(Send-Q)比较特殊,在不同的 socket 状态。它们表示的含义是不同的。

当 socket 状态处于 Established时:

  • Recv-Q 表示 socket 缓冲区中还没有被应用程序读取的字节数;
  • Send-Q 表示 socket 缓冲区中还没有被远端主机确认的字节数;

而当 socket 状态处于 Listen 时:

  • Recv-Q 表示全连接队列的长度;
  • Send-Q 表示全连接队列的最大长度;

那对于协议栈的统计信息,依然还是使用 netstatss,它们查看统计信息的命令如下:

ss 命令输出的统计信息相比 netsat 比较少,ss 只显示已经连接(estab )、关闭(closed )、孤儿(orphaned) socket 等简要统计。

netstat 则有更详细的网络协议栈信息,比如上面显示了 TCP 协议的主动连接(active connections openings )、被动连接(passive connection openings )、失败重试(failed connection attempts )、发送(segments send out )和接收(segments received)的分段数量等各种信息。



四、查看网络吞吐率和PPS

可以使用 sar 命令当前网络的吞吐率和 PPS,用法是给 sar 增加 -n 参数就可以查看网络的统计信息,比如

  • sar -n DEV,显示网口的统计数据;
  • sar -n EDEV,显示关于网络错误的统计数据;
  • sar -n TCP,显示 TCP 的统计数据

它们的含义:

  • rxpck/stxpck/s 分别是接收和发送的 PPS,单位为包 / 秒。
  • rxkB/stxkB/s 分别是接收和发送的吞吐率,单位是 KB/ 秒。
  • rxcmp/stxcmp/s 分别是接收和发送的压缩数据包数,单位是包 / 秒。

对于带宽,我们可以使用 ethtool 命令来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。我们通常提到的千兆网卡、万兆网卡等,单位也都是比特(bit)。如下你可以看到, eth0 网卡就是一个千兆网卡:

bash 复制代码
$ ethtool eth0 | grep Speed
  Speed: 1000Mb/s


五、连通性与延时性

要测试本机与远程主机的连通性和延时,通常是使用 ping 命令,它是基于 ICMP 协议的,工作在网络层。

显示的内容主要包含 icmp_seq(ICMP 序列号)、TTL(生存时间,或者跳数)以及 time (往返延时),而且最后会汇总本次测试的情况,如果网络没有丢包,packet loss 的百分比就是 0。

不过,需要注意的是,ping 不通服务器并不代表 HTTP 请求也不通,因为有的服务器的防火墙是会禁用 ICMP 协议的。



六、参考

小林 coding

相关推荐
像风一样自由202031 分钟前
局部放电在线监测系统的数据传输协议选择研究:Modbus TCP 与 MQTT
网络·网络协议·tcp/ip
有谁看见我的剑了?1 小时前
ubuntu 22.04 wifi网卡配置地址上网
linux·运维·ubuntu
码农新猿类1 小时前
Ubuntu摄像头打开失败
linux·运维·ubuntu
PHASELESS4111 小时前
TCP协议十大核心特性深度解析:构建可靠传输的基石
网络·网络协议·tcp/ip
jstart千语1 小时前
【消息队列】RabbitMQ基本认识
java·服务器·分布式·rabbitmq
PWRJOY1 小时前
Ubuntu磁盘空间分析:du命令及常用组合
linux·运维·ubuntu
wanhengidc2 小时前
SCDN能够运用在物联网加速当中吗?
运维·服务器·网络
leona_nuaa2 小时前
p2p虚拟服务器
服务器·网络协议·p2p
zuozewei2 小时前
安全扫描之 Linux 杀毒软件 Clamav 安装
linux·运维·安全
wangchen_02 小时前
linux-信号保存和处理
linux·运维·服务器