Linux 性能优化实战(倪朋飞)---网络性能信息查看

网络性能指标

  • 带宽,链路的最大传输速率,单位通常为 b/s
  • 吞吐量,单位时间内成功传输的数据量,单位通常为 b/s,或 B/s。吞吐量受带宽限制,吞吐量/带宽=网络的使用率
  • 延时,从网络请求发出后,一直收到远端响应,所需的时间延迟
  • PPS,Packet Per Second(包/秒),以网络包为单位的传输速率,通常用来评估网络的转发能力

此外,网络的可用性、并发连接数(TCP 连接数量)、丢包率、重传率等也是常用的性能指标。

网络配置

$ ifconfig enp0s8
enp0s8    Link encap:Ethernet  HWaddr 08:00:27:40:31:81  
          inet addr:192.168.57.3  Bcast:192.168.57.255  Mask:255.255.255.0
          inet6 addr: fe80::6f67:8e57:5e6b:d276/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1559 (1.5 KB)  TX bytes:8118 (8.1 KB)

  • 网络接口的状态标志。RUNNING 表示物理网络是连通的。
  • MTU 大小。默认是 1500。
  • 网络接口的 IP 地址、子网及 MAC 地址。这些是保证网络功能正常工作的必需。
  • 网络收发的字节数、包数、错误数及丢包情况,特别是 TX 和 RX 部分的 errors、dropped、overrunns、carrier 及
    collisions 等指标不为 0 时,通常表示出现了网络 I/O 问题,其中:
  • errors 表示发生错误的数据包数,如校验错误、帧同步错误等;
  • dropped 表示丢弃的数据包数,及数据包已经收到了 Ring Buffer,但因内存不足等原因丢包;
  • overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理处理(队列满)而导致的丢包。
  • carrier 表示发生 carrirer 错误的数据包数,如双工模式不匹配、物理电缆出现问题等;
  • collisions 表示碰撞数据包数。

套接字信息

ss 比 netstat 速度更快。

# head -n 3 表示只显示前面 3 行
# -l 表示只显示监听套接字
# -t 表示只显示 TCP 套接字
# -n 表示显示数字地址和端口 (而不是名字)
# -p 表示显示进程信息
$ ss -ltnp | head -n 3
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
LISTEN   0         128           127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=840,fd=13))
LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1459,fd=3))

会显示套接字的状态、接收队列、发送队列、本地地址、远端地址、进程 PID 和进程名称等。

接收队列(Recv-Q)和发送队列(Send-Q)通常应该是 0,不是 0 时说明有网络包的堆积。需注意,在不同套接字状态下,它们的含义不同。

当套接字处于连接状态(Established):

  • Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数。
  • Send-Q 表示还没有被远端主机确认的字节数。

当套接字处于监听状态时(Listening):

  • Recv-Q 表示 syn backlog 当前的值。
  • Send-Q 表示最大的 syn backlog 值。

协议栈统计信息

netstat -s
...
Tcp:
    3244906 active connection openings
    23143 passive connection openings
    115732 failed connection attempts
    2964 connection resets received
    1 connections established
    13025010 segments received
    17606946 segments sent out
    44438 segments retransmitted
    42 bad segments received
    5315 resets sent
    InCsumErrors: 42
...

$ ss -s
Total: 186 (kernel 1446)
TCP:   4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	  1446      -         -
RAW	  2         1         1
UDP	  2         2         0
TCP	  4         3         1
...

ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 还展示了 TCP 协议的主动连接、被动连接、失败重试、发送和接收的分段数量等各种信息。

网络吞吐和 PPS

# 数字 1 表示每隔 1 秒输出一组数据
$ sar -n DEV 1
Linux 4.15.0-1035-azure (ubuntu) 	01/06/19 	_x86_64_	(2 CPU)

13:21:40        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
13:21:41         eth0     18.00     20.00      5.79      4.25      0.00      0.00      0.00      0.00
13:21:41      docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:21:41           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • rxpck/s 和 txpsk/s 为接收和发送的 PPS,包/秒
  • rxkB/s 和 txkB/s 为接收和发送的吞吐量,KB/秒
  • rxcmp/s 和 txcmp/s 为接收和发送的压缩数据包数,包/秒
  • %ifutil 为网络接口的使用率,即半双工模式下为 (rxkB/s + txkB/s) / Bandwith,而全双工模式下为 max(rxkB/s, txkB/s) / Bandwidth,Bandwith 可用 ethtool 查询
$ ethtool eth0 | grep Speed
	Speed: 1000Mb/s

为千兆网卡

连通性和延时

# -c3 表示发送三次 ICMP 包后停止
$ ping -c3 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=54 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=47 time=244 ms
64 bytes from 114.114.114.114: icmp_seq=3 ttl=67 time=244 ms

--- 114.114.114.114 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 244.023/244.070/244.105/0.034 ms
  • 第一部分是每个 ICMP 请求的信息
  • 第二部分是三次 ICMP 请求的汇总

参考
倪朋飞. Linux 性能优化实战.

你可能感兴趣的:(Linux,性能优化实战(倪朋飞)笔记)