实际上,我们通常用带宽、吞吐量、延时、PPS等指标衡量网络的性能:
这些指标只是基本的,除了这些指标之外:网络可用性、并发连接数、丢包率、重传率也是常用的性能指标。
分析网络性能的第一步是查看网络接口的配置和状态。我们可用使用ifconfig
或者ip
命令来查看网络配置。
现在我们演示一下ip命令查看eth0端口的信息:
ubuntu@VM-0-2-ubuntu:~/libco/libco$ ip -s addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 52:54:00:88:37:58 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/20 brd 172.17.15.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe88:3758/64 scope link
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
2830321820 23061948 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3649280587 21806912 0 0 0 0
在这里面有几个比较重要的指标需要我们关注一下:
LOWER_UP
,其表示当前状态是联通的;如果不是这个值,通常都是网络被拔掉了mtu 1500
,表示当前mtu的大小172.17.0.2/20
和IPv6地址:fe80::5054:ff:fe88:3758/64
除了ifconfig和ip显示的网络接口收发数据包的统计信息外,网络协议栈中的统计信息也非常值得我们关注。
我们可用使用netstat
或者 ss
来查看套接字、网络栈、网络接口以及路由表信息。
以下是使用ss来查询网络连接信息的例子:
# -l表示只显示监听套接字
# -t表示只显示TCP套接字
# -n表示只显示数字地址和端口
# -p表示显示进程信息
ubuntu@VM-0-2-ubuntu:~/libco/libco$ ss -ltnp | head -n 3
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:43719 0.0.0.0:* users:(("node",pid=29762,fd=18))
LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
其中我们需要特别关注Recv-Q
和 Send-Q
这两个队列,它们通常是0。如果它们不是0时,说明有网络包的堆积发生。当然,还要注意,在不同套接字状态下,它们的含义不同:
博主说:
全连接队列也是就TCP三次握手中,服务端在收到客户端最后一个ACK报文后,保存这个连接的队列。
类似,使用netstat可用查看协议栈的统计信息。这里使用的是netstat,因为比较详细:
# -s表示查看协议栈信息
ubuntu@VM-0-2-ubuntu:~/libco/libco$ netstat -s
# 篇幅较长,就显示部分
Ip:
Forwarding: 1
39262312 total packets received
2 with invalid addresses
0 forwarded
9 with unknown protocol
0 incoming packets discarded
39262300 incoming packets delivered
38464838 requests sent out
2 reassemblies required
1 packets reassembled ok
Icmp:
1400109 ICMP messages received
743 input ICMP message failed
InCsumErrors: 1
ICMP input histogram:
destination unreachable: 1934
timeout in transit: 64
echo requests: 1398094
echo replies: 10
timestamp request: 6
1421145 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 23045
echo replies: 1398094
timestamp replies: 6
......
对于网络吞吐量和PPS,我们可用使用sar
命令来查看网络统计信息:
# -n 参数表示查看网络信息
# DEV 表示网络接口
# 1 表示每隔一秒输出一组数据
ubuntu@VM-0-2-ubuntu:~/libco/libco$ sar -n DEV 1
Linux 4.15.0-140-generic (VM-0-2-ubuntu) 05/25/2021 _x86_64_ (2 CPU)
01:44:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
01:44:59 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:44:59 PM lo 18.00 18.00 1.21 1.21 0.00 0.00 0.00 0.00
01:44:59 PM eth0 30.00 79.00 2.13 96.15 0.00 0.00 0.00 0.00
这里有几个指标值得我们重点关注一下:
一般来说,我们都会使用ping
命令查看我们是否能和网络远程主机连通,这通常基于ICMP协议。
那么,你们是否知道,ping的各部分显示的含义呢?
# -c3 表示发送三次ICMP包后停止
ubuntu@VM-0-2-ubuntu:~/libco/libco$ ping -c3 www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=49 time=9.55 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=49 time=9.44 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=49 time=9.45 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 9.442/9.484/9.559/0.095 ms
ping的输出,一般来说可以分为两个部分:
[1] 倪朋飞.Linux性能优化实战.极客时间