⽹络的性能指标
Linux ⽹络协议栈是根据 TCP/IP 模型来实现的, TCP/IP 模型由应⽤层、传输层、⽹络层和⽹络接⼝层,共四层组成,每⼀层都有各⾃的职责。
基本指标:
- 带宽,表示链路的最⼤传输速率,单位是 b/s (⽐特 / 秒),带宽越⼤,其传输能⼒就越强。
- 延时,表示请求数据包发送后,收到对端响应,所需要的时间延迟。不同的场景有着不同的含义,⽐如可以表示建⽴ TCP 连接所需的时间延迟,或⼀个数据包往返所需的时间延迟。
- 吞吐率,表示单位时间内成功传输的数据量,单位是 b/s(⽐特 / 秒)或者 B/s(字节 / 秒),吞吐受带宽限制,带宽越⼤,吞吐率的上限才可能越⾼。
- PPS,全称是 Packet Per Second(包 / 秒),表示以⽹络包为单位的传输速率,⼀般⽤来评估系统对于⽹络的转发能⼒。
其他指标:
- ⽹络的可⽤性,表示⽹络能否正常通信;
- 并发连接数,表示 TCP 连接数量;
- 丢包率,表示所丢失数据包数量占所发送数据组的⽐率;
- 重传率,表示重传⽹络包的⽐例;
网络配置查看
可以使⽤ ifconfig 或者 ip 命令来查看
ifconfig 属于 net-tools 软件包, ip 属于iproute2 软件包,我的印象中 net-tools 软件包没有⼈继续维护了,⽽ iproute2 软件包是有开发者依然在维护,所以更推荐你使⽤ ip ⼯具。
使⽤这两个命令,来查看⽹⼝ eth0 的配置等信息
信息解读:
- 第⼀,⽹⼝的连接状态标志。其实也就是表示对应的⽹⼝是否连接到交换机或路由器等设备,如果
- 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 表示冲突、碰撞数据包数;
socket信息查看
可以使⽤ netstat 或者 ss ,这两个命令查看 socket、⽹络协议栈、⽹⼝以及路由表的信息。
如果在⽣产环境中要查看这类信息的时候,尽量不要使⽤ netstat 命令,因为它的性能不好,在系统⽐较繁忙的情况下,如果频繁使⽤ netstat 命令则会对性能的开销雪上加霜,所以更推荐你使⽤性能更好的 ss 命令。
网络吞吐率和PPS查看
可以使⽤ sar 命令当前⽹络的吞吐率和 PPS,⽤法是给 sar 增加 -n 参数就可以查看⽹络的统计信
息,⽐如:
- sar -n DEV,显示⽹⼝的统计数据;
- sar -n EDEV,显示关于⽹络错误的统计数据;
- sar -n TCP,显示 TCP 的统计数据
- rxpck/s 和 txpck/s 分别是接收和发送的 PPS,单位为包 / 秒。
- rxkB/s 和 txkB/s 分别是接收和发送的吞吐率,单位是 KB/ 秒。
- rxcmp/s 和 txcmp/s 分别是接收和发送的压缩数据包数,单位是包 / 秒。
如何从⽇志分析 PV、 UV
要分析⽇志的时候,先⽤ ls -lh 命令查看⽇志⽂件的⼤⼩,如果⽇志⽂件⼤⼩⾮常⼤,最好不要在
线上环境做。
如果⽇志⽂件数据量太⼤,你直接⼀个 cat 命令⼀执⾏,是会影响线上环境,加重服务器的负载,严重的话,可能导致服务器⽆响应
当发现⽇志很⼤的时候,我们可以使⽤ scp 命令将⽂件传输到闲置的服务器再分析, scp 命令使⽤⽅式如下图:
慎用cat命令
cat 命令是⽤来查看⽂件内容的,但是⽇志⽂件数据量有多少,它就读多少,很显然不适⽤
⼤⽂件。
对于⼤⽂件,⽤ less 命令去读⽂件⾥的内容,因为 less 并不会加载整个⽂件,⽽是按需加载,先是输出⼀⼩⻚的内容,当你要往下看的时候,才会继续加载。