本文是性能问题分析与排查思路的内容之一,第三部分主要分为日志第一阶段的7篇系列文章、机器的4个周期、环境的2个问题,这是第三篇文章,讲的是机器(硬件)网络方面的排查方法和最佳实践。
主要内容如图所示:
本文主要介绍网络原生工具、NetStat、网络时延、抖动和丢包率查看、流量和网络带宽限制查询、链路分析、TCP连接检测以及常见的网络相关异常。
Netstat 是一个控制台命令,用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计信息,它是一个功能强大的网络工具,可帮助用户监视网络活动、查找与网络相关的问题以及提供有关网络连接的详细信息。 netstat命令提供了多种选项,方便用户根据自己的需求自定义输出信息,功能很多,本文就不一一赘述了,只介绍这样一个命令行工具,具体语法可以随时搜索。
问题 1:检查端口是否处于监听状态? 命令:netstat -nalp |grep 端口号
问题 2:按连接状态划分,某个进程占了多少个 TCP 连接?
命令为:netstat -anp | grep 12345 | awk '/^tcp/ ' | uniq -c
这对于解决连接过多、不释放或半连接的问题非常有用!
如图所示,该进程已经建立了3000多个网络连接,最后发现该进程存在连接未释放的bug,这是直接证据!问题 3:根据 PID 分类计数,取前 10 位数字。
命令为:netstat -anp | awk '/^tcp/ ' | cut -d/ -f1 | sort | uniq -c | sort -nr | head
结果如图所示
图中第一列是连接数,第二列是进程的PID。以上用法,扔砖引玉。
ping
这是一个众所周知的命令,很普通,但足够强大。
在图中,您可以首先查看网络是否连接。 其次,可以直接出现的延迟,比如上面的数字超过20毫秒,已经非常高了。 数据中心内部一般小于1毫秒,我在这里ping一个外部网络。 然后,通过最后一行的统计,可以看到网络抖动非常小,只有0321毫秒,所以虽然网络很慢,但非常稳定和均匀。 最后,可以测试更长时间的丢包率,即0%的丢包率,看看是否存在丢包。以上
ping
您可以运行该命令实时查看丢包情况。 而ifconfig
该命令可以查看历史统计信息,显示每个网卡的信息,重点关注每个信息块的最后两行:
表示接收和发送的网络报文数量,包括 drop 关键字,即丢包次数,这里可以看作2010571,因此需要确认网络是否拥塞或其他异常。
一般情况下,网络流量应通过监控系统的页面查看,如果没有现有的监控页面可以查看,请使用以下命令进行查看。
用ethtool 网卡名称
使用上述命令获取 NIC 名称!
上图中的速度是网卡的理论上限,即千兆网卡,1000MB s。 这里需要提醒的是,千兆不是我们常说的1GB,B在这里有点,不是字节!
在这里,我们需要再次使用 Linux 工件 sar 命令。
SAR的功能太多了,关于查看Internet速度的具体命令是:sar -n dev 1
第一列是时间戳。 其他主要字段解释如下:
iface:这是网络接口的名称。 在此示例中,有两个接口。 rxpck/s:这是每秒接收的数据包数txpck/s:这是每秒传输的数据包数rxkb/s:这是每秒接收的千字节数txkb/s:这是每秒传输的千字节数,通过将发送和接收的字节数与上面的带宽进行比较,可以查看是否已经达到网络瓶颈!
iptraf-ng
还可以监控所有传入和传出流量,按协议区分流量,并设置过滤器。 它可用于实时监控网络流量、计算网络接口的使用情况、查看网络连接等。 这是一个稍微好一点的互联网速度检查器! 如图所示
TracePath 是一种网络诊断工具,用于跟踪从源主机到目标主机的数据包路径。 它通过发送一系列 TTL(生存时间)值递增的 ICMP 回显请求数据包来探测路径上的每个路由器,并记录每个路由器的 IP 地址和响应时间。 示例输出:
tracepath to www.example.com (93.184.216.34), 30 hops max, 60 byte packets
1 192.168.1.1 (1.234 ms)
2 10.0.0.1 (2.345 ms)
4 203.0.113.1 (123.456 ms)
5 * 6 93.184.216.34 (123.456 ms)
星号表示在该跃点未收到任何回复。 每条线路还包括跃点的 IP 地址以及从源主机到跃点的往返时间(以毫秒为单位)。
如果您发现某个跳点的响应时间特别长或没有收到响应,则可能表明路由器有故障或存在网络拥塞问题。 这对于网络故障排除和优化非常有帮助。
您可以继续使用 sar 命令来观察网络的重传次数和强制关闭次数。 此外,可以适当扩展Linux网络半连接和全连接的队列大小。
网络连接问题
错误信息:network is unreachable
connection refused
no route to host
等。 现象:无法ping通其他主机、无法访问Internet、无法访问远程服务等。 解决方案:检查本地网络设置、路由器配置、防火墙设置等。 DNS 解析问题
错误信息:name or service not known
症状:无法通过域名**访问,只能通过 IP 地址访问。 解决办法:选中/etc/resolv.conf
文件,或尝试更改 DNS 服务器。 服务端口侦听问题
错误信息:connection refused
症状:尝试连接到服务端口时,服务器拒绝它。 解决办法:检查服务是否正在运行、端口是否打开以及防火墙规则是否允许连接。 网络超时
错误信息:request timed out
症状:网络请求长时间无响应。 解决办法:检查网络延迟、带宽限制、服务器负载和其他因素。 路由配置问题
错误信息:destination host unreachable
症状:尝试访问网络时,显示一条消息,指出无法访问目标主机。 解决办法:使用route
用于查看和修改路由表以确保默认路由设置正确的命令。 Linux 网络系统有许多故障排除工具,每个工具都有自己独特的功能和应用场景。 通过结合这些工具并利用我们的经验,我们能够更有效地诊断和解决网络问题。 然而,仅仅依靠工具是不够的,我们还需要不断学习和积累网络知识,以便更好地理解和处理各种网络问题。 希望本文介绍的故障排除工具和经验能够为读者在Linux网络系统的维护和故障排除方面提供一些帮助。