Linux查看网络性能指标实现方式

 更新时间:2025年09月09日 08:43:46   作者:每天进步一......  
文章介绍了网络性能指标(带宽、延时、吞吐率、PPS等),并推荐使用ip、ss和sar工具进行配置和统计分析,同时提到ping测试连通性及延时,但需注意防火墙限制

一、性能指标有哪些?

  • 带宽,表示链路的最大传输速率,单位是 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 网卡就是一个千兆网卡:
$ ethtool eth0 | grep Speed
  Speed: 1000Mb/s

五、连通性与延时性

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux中特殊权限SUID、SGID与SBIT的深入讲解

    Linux中特殊权限SUID、SGID与SBIT的深入讲解

    linux对文件的权限管理简直是让人叹为观止,所以这篇文章主要给大家介绍了关于Linux中特殊权限SUID、SGID与SBIT的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • Linux自动化交互脚本expect从安装到开发详解

    Linux自动化交互脚本expect从安装到开发详解

    运行shell脚本有时会提示输入密码,如何让脚本自动输入密码呢?这时使用expect,Expect是基于Tcl发展而来的,它不仅可以进行交互,还可以根据程序的提示模拟标准输入,实现自动化交互执行的功能,在排查expect脚本执行问题时,应关注脚本是如何被调用和执行的
    2024-06-06
  • Linux使用perf工具进行性能分析的详细指南

    Linux使用perf工具进行性能分析的详细指南

    perf 是 Linux 内核自带的一个性能分析工具,它能够采集和分析系统和应用程序的性能数据,本文主要介绍了使用perf工具进行性能分析的具体操作,需要的可以参考下
    2024-12-12
  • CentOS6.7系统中配置LNMP环境

    CentOS6.7系统中配置LNMP环境

    LNMP 代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。LNMP 这种架构目前也是非常流行,今天我们就来看下如何在CentOS6.7系统中配置LNMP环境
    2016-10-10
  • vi与vim如何修改tab为4个空格方法示例

    vi与vim如何修改tab为4个空格方法示例

    在Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设置长度,非常灵活,下面这篇文章主要给大家介绍了关于vi与vim如何修改tab为4个空格的相关资料,需要的朋友可以参考下
    2018-07-07
  • centos7中firewall防火墙命令详解

    centos7中firewall防火墙命令详解

    本篇文章主要介绍了centos7中firewall防火墙命令详解,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • Linux添加静态路由两种实现方法解析

    Linux添加静态路由两种实现方法解析

    这篇文章主要介绍了Linux添加静态路由两种实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • linux 不删除文件,清空文件中内容的命令

    linux 不删除文件,清空文件中内容的命令

    下面小编就为 大家带来一篇linux 不删除文件,清空文件中内容的命令。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 如何使用Linux文本操作命令ed进行提权nov5详解

    如何使用Linux文本操作命令ed进行提权nov5详解

    这篇文章主要给大家介绍了关于如何使用Linux文本操作命令ed进行提权nov5的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Apache中使非伪静态url跳转到伪静态url的方法

    Apache中使非伪静态url跳转到伪静态url的方法

    这篇文章主要介绍了Apache中使非伪静态url跳转到伪静态url的方法,主要是在使用.htaccess时的问题,需要的朋友可以参考下
    2015-07-07

最新评论