当前位置: 首页 > article >正文

《服务器网络出问题了?到底应该如何观察》- 散开迷雾篇

核心点:如何观察网络性能?哪些指标可以用来衡量 Linux 的网络性能呢?

性能指标

实际上,我们通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能。

  • 带宽:最大传输速率,单位通常为 M/s 等

  • 吞吐量:单位时间内成功传输的数据量

  • 延时:网络请求发出后,一直到收到远端响应,所需要的时间

  • PPS:是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。 除了这些指标,网络的可用性(网络能否正常通信)、并发连接数(TCP 连接数量)、丢包率(丢包百分比)、重传率(重新传输的网络包比例)等也是常用的性能指标。

有了一些基本印象后,接下来知行合一,动手一起观测这些性能指标吧

网络配置

分析网络问题第一步,通常是查看网络接口的配置和状态。可以使用 ifconfig 或者 ip 命令,来查看网络的配置。

以网络接口 eth0 为例,你可以运行下面的两个命令,查看它的配置和状态:

$ ifconfig eth0

$ ip -s addr show dev eth0

这两个命令输出的指标基本相同,都包括了网络接口的状态标志、MTU 大小、IP、子网、MAC 地址以及网络包收发的统计信息。

里面需要特别关注的内容

第一:网络接口的状态标志。ifconfig 输出中的 RUNNING ,或 ip 输出中的 LOWER_UP ,都表示物理网络是连通的,否则表示网线可能被拔掉了

第二:MTU 的大小。MTU 默认大小是 1500, 该值控制了网络包的大小,过大的网络包会切分分片,感兴趣的可以看我的上一篇文章温习一下

第三,网络接口的 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 只显示了网络接口收发数据包的统计信息,但在实际的性能问题中,网络协议(TCP/IP 协议)栈中的统计信息,我们也必须关注。

这儿推荐两个命令 netstat 或者 ss

# head -n 3 表示只显示前面3行
# -l 表示只显示监听套接字
# -n 表示显示数字地址和端口(而不是名字)
# -p 表示显示进程信息
$ netstat -nlp | head -n 3

# 同上
# -t 表示只显示 TCP 套接字
$ ss -ltnp | head -n 3

netstat 和 ss 的输出也是类似的, 都展示了套接字的状态、接收队列、发送队列、本地地址、远端地址、进程 PID 和进程名称等。

不过我更推荐 ss,因为它比 netstat 提供了更好的性能(速度更快)。

需要特别关注接收队列(Recv-Q)和发送队列(Send-Q),套接字不同状态下,它们的含义不同:

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

  • Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)。

  • Send-Q 表示还没有被远端主机确认的字节数(即发送队列长度)。

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

  • Recv-Q 表示全连接队列的长度。

  • 而 Send-Q 表示全连接队列的最大长度。

解释一下名词含义,所谓全连接就是所有了完成三次握手的TCP连接。

总结

本文介绍了如何观察Linux系统的网络性能。并列出了一些常用的网络性能指标,如带宽、吞吐量、延时和PPS(每秒传输的包数)。

还提供了对应指标的命令比如 ipconfig、ip、nestat、ss,这样日常工作中也 可以知道观察哪些内容,多应用在平日的实战中,熟能生巧,成为别人口中的大神也是指日可待

关注我,更新更多 linux 相关的知识。
实战、性能优化、线上问题定位,让你无往不胜,


http://www.kler.cn/news/343426.html

相关文章:

  • Scala面试题大全~基础题(15题)
  • 5.STM32的串口通信
  • 七大排序详解
  • 【C++图文并茂】01背包问题不会?超详细的详解,看完保证你会
  • Bean,看到P188没看了与maven
  • Qt文件对话框、颜色对话框、字体对话框、输入对话框
  • 【js逆向学习】极志愿 javascript+python+rpc
  • YOLOv10改进策略【注意力机制篇】| CVPR2024 CAA上下文锚点注意力机制
  • DBeaver的安装与使用
  • 11月EI学术会议推荐
  • 35.反转链表
  • python 实现bfs 最短路径算法
  • python中的数组模块numpy(一)(适用物联网数据可视化及数据分析)
  • 【VUE】defineProperty和proxy的区别
  • 股市和期市历史分钟以及均线策略高级用法
  • 1.GoLang概述开发环境
  • 杂谈--Linux是什么用途?
  • 【java应用系统连接自有https证书(无法验证)的minio服务时报错问题处理过程】
  • JAVA中线程的生命周期
  • 将JSON的格式数据存储到数据库中