我们通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的 性能。
带宽,表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。
吞吐量,表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者
B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。
延时,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景
中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP
握手延时),或一个数据包往返所需的时间(比如 RTT)。
PPS,是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。
PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即 PPS
可以达到或者接近理论最大值)。而基于 Linux 服务器的转发,则容易受网络包大小的
影响。
除了这些指标,网络的可用性(网络能否正常通信)、并发连接数(TCP 连接数量)、丢
包率(丢包百分比)、重传率(重新传输的网络包比例)等也是常用的性能指标。
网络配置
以网络接口 eth0 为例,运行ifconfig eth0 以及ip -s addr show dev eth0
第一,网络接口的状态标志。ifconfig 输出中的 RUNNING ,或 ip 输出中的
LOWER_UP ,都表示物理网络是连通的,即网卡已经连接到了交换机或者路由器中。如
果你看不到它们,通常表示网线被拔掉了。
第二,MTU 的大小。MTU 默认大小是 1500,根据网络架构的不同(比如是否使用了
VXLAN 等叠加网络),你可能需要调大或者调小 MTU 的数值。
第三,网络接口的 IP 地址、子网以及 MAC 地址。这些都是保障网络功能正常工作所必需
的,你需要确保配置正确。
第四,网络收发的字节数、包数、错误数以及丢包情况,特别是 TX 和 RX 部分的
errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,通常表示出现
了网络 I/O 问题。其中:
errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;
dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等
原因丢包;
overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不
及处理(队列满)而导致的丢包;
carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题
等;
collisions 表示碰撞数据包数。
套接字信息
ifconfig 和 ip 只显示了网络接口收发数据包的统计信息,但在实际的性能问题中,网络协
议栈中的统计信息,我们也必须关注。可以用 netstat 或者 ss ,来查看套接字、网络
栈、网络接口以及路由表的信息。
网络吞吐和 PPS
sar 增加 -n 参数就可以查看网络的统计信息
rxpck/s 和 txpck/s 分别是接收和发送的 PPS,单位为包 / 秒。
rxkB/s 和 txkB/s 分别是接收和发送的吞吐量,单位是 KB/ 秒。
rxcmp/s 和 txcmp/s 分别是接收和发送的压缩数据包数,单位是包 / 秒。
%ifutil 是网络接口的使用率,即半双工模式下为 (rxkB/s+txkB/s)/Bandwidth,而全双
工模式下为 max(rxkB/s, txkB/s)/Bandwidth。
连通性和延时
使用 ping ,来测试远程主机的连通性和延时