Linux实例网站访问丢包延时高

  • A+
所属分类:Linux
高性能企业级服务器首台5折

当网站访问很慢或无法访问时,若排除其它显著问题,而检测到 ping 有明显丢包时,建议您作链路测试。Linux 环境下,您可以通过 mtr 命令行工具(优先使用) 或 traceroute 命令行工具进行链路测试来判断问题来源。

通常情况下,请依照下述步骤进行处理:

  1. 利用链路测试工具探测网络状况和服务器状态。
  2. 根据链路测试结果分析处理。

mtr 命令行工具(优先使用)

mtr (My traceroute)几乎是所有 Linux 发行版本预装的网络测试工具,集成了 tracert 与 ping 这两个命令的图形界面,功能十分强大。

ping 与 tracert 通常被用來检测网络状况和服务器状态,具体说明如下:

命令名称 具体说明
ping 送出封包到指定的服务器。如果服务器有回应就会传送回封包,并附带返回封包来回的时间。
tracert 返回从用户的电脑到指定的服务器中间经过的所有节点(路由)以及每个节点的回应速度。

mtr 默认发送 ICMP 数据包进行链路探测,通过 -u 参数来指定 UDP 数据包用于探测。相对于 traceroute 只作一次链路跟踪测试,mtr 会对链路上的相关节点做持续探测并给出相应的统计信息。mtr 能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

用法说明

  1. mtr [-hvrctglspni46] [--help] [--version] [--report]
  2.                 [--report-cycles=COUNT] [--curses] [--gtk]
  3.                 [--raw] [--split] [--no-dns] [--address interface]
  4.                 [--psize=bytes/-s bytes]
  5.                 [--interval=SECONDS] HOSTNAME [PACKETSIZE]

示例输出

  1. [root@centos ~]# mtr 223.5.5.5
  2.                                   My traceroute  [v0.75]
  3. mycentos6.6 (0.0.0.0)                                             Wed Jun 15 23:16:27 2016
  4. Keys:  Help   Display mode   Restart statistics   Order of fields   quit
  5.                                                   Packets               Pings
  6.  Host                                           Loss%   Snt   Last   Avg  Best  Wrst StDev
  7.  1. ???
  8.  2192.168.17.20                                0.0%     7   13.1   5.6   2.1  14.7   5.7
  9.  3111.1.20.41                                  0.0%     7    3.0  99.2   2.7 632.1 235.4
  10.  4111.1.34.197                                 0.0%     7    1.8   2.0   1.2   2.9   0.6
  11.  5211.138.114.25                               0.0%     6    0.9   4.7   0.9  13.9   5.8
  12.  6211.138.114.70                               0.0%     6    1.8  22.8   1.8  50.8  23.6
  13.     211.138.128.134
  14.     211.138.114.2
  15.     211.138.114.66
  16.  742.120.244.186                               0.0%     6    1.4   1.6   1.3   1.8   0.2
  17.     42.120.244.198
  18.  842.120.244.246                               0.0%     6    2.8   2.9   2.6   3.2   0.2
  19.     42.120.244.242
  20.  9. ???
  21. 10223.5.5.5                                    0.0%     6    2.7   2.7   2.5   3.2   0.3

常见可选参数说明

  • -r 或 —report:以报告模式显示输出。
  • -p 或 —split:将每次追踪的结果分别列出来,而非如 —report 统计整个结果。
  • -s 或 —psize:指定 ping 数据包的大小。
  • -n 或 —no-dns:不对 IP 地址做域名反解析。
  • -a 或 —address:设置发送数据包的 IP 地址。用于主机有多个 IP 时。
  • -4:只使用 IPv4 协议。
  • -6:只使用 IPv6 协议。

在 mtr 运行过程中,您也可以输入相应字母来快速切换模式,各字母的含义如下:

  • ? 或 h:显示帮助菜单。
  • d:切换显示模式。
  • n:切换启用或禁用 DNS 域名解析
  • u:切换使用 ICMP 或 UDP 数据包进行探测。

返回结果说明

默认配置下,返回结果中各数据列的说明如下:

  • 第一列(Host):节点 IP 地址和域名。如前面所示,按 n 键可以切换显示。
  • 第二列(Loss%):节点丢包率。
  • 第三列(Snt):每秒发送数据包数。默认值是 10,可以通过参数 -c 指定。
  • 第四列(Last):最近一次的探测延迟值。
  • 第五、六、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。
  • 第八列(StDev):标准偏差。越大说明相应节点越不稳定。

traceroute 命令行工具

traceroute 是几乎所有 Linux 发行版本预装的网络测试工具,用于跟踪 Internet 协议(IP)数据包传送到目标地址时经过的路径。

traceroute 先发送具有小的最大存活时间值(Max_TTL)的 UDP 探测数据包,然后侦听从网关开始的整个链路上的 ICMP TIME_EXCEEDED 响应。探测从 TTL=1 开始,TTL 值逐步增加,直至接收到 ICMP PORT_UNREACHABLE 消息。ICMP PORT_UNREACHABLE 消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大 TTL 值。

traceroute 默认发送 UDP 数据包进行链路探测。可以通过 -I 参数来指定发送 ICMP 数据包用于探测。

用法说明

  1. traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [  -t TypeOfService ] [ -f flow ] [ -v ] [  -w WaitTime ] Host [ PacketSize ]

示例输出

  1. [root@centos ~]# traceroute -I 223.5.5.5
  2. traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets
  3.  1  * * *
  4.  2  192.168.17.20 (192.168.17.20)  3.965 ms  4.252 ms  4.531 ms
  5.  3  111.1.20.41 (111.1.20.41)  6.109 ms  6.574 ms  6.996 ms
  6.  4  111.1.34.197 (111.1.34.197)  2.407 ms  2.451 ms  2.533 ms
  7.  5  211.138.114.25 (211.138.114.25)  1.321 ms  1.285 ms  1.304 ms
  8.  6  211.138.114.70 (211.138.114.70)  2.417 ms 211.138.114.66 (211.138.114.66)  1.857 ms 211.138.114.70 (211.138.114.70)  2.002 ms
  9.  7  42.120.244.194 (42.120.244.194)  2.570 ms  2.536 ms 42.120.244.186 (42.120.244.186)  1.585 ms
  10.  8  42.120.244.246 (42.120.244.246)  2.706 ms  2.666 ms  2.437 ms
  11.  9  * * *
  12. 10  public1.alidns.com (223.5.5.5)  2.817 ms  2.676 ms  2.401 ms

常见可选参数说明

  • -d 使用 Socket 层级的排错功能。
  • -f 设置第一个检测数据包的存活数值 TTL 的大小。
  • -F 设置不要分段标识。
  • -g 设置来源路由网关,最多可设置 8 个。
  • -i 使用指定的网卡送出数据包。用于主机有多个网卡时。
  • -I 使用 ICMP 数据包替代 UDP 数据包进行探测。
  • -m 设置检测数据包的最大存活数值 TTL 的大小。
  • -n 直接使用 IP 地址而非主机名称(禁用 DNS 反查)。
  • -p 设置 UDP 传输协议的通信端口。
  • -r 忽略普通的 Routing Table,直接将数据包送到远端主机上。
  • -s 设置本地主机送出数据包的 IP 地址。
  • -t 设置检测数据包的 TOS 数值。
  • -v 详细显示指令的执行过程。
  • -w 设置等待远端主机回包时间。
  • -x 开启或关闭数据包的正确性检验。

分析链路测试结果

以如下链路测试结果示例图为基础进行阐述:

1

操作步骤

  1. 判断各区域是否存在异常,并根据各区域的情况分别处理。
    • 区域 A:客户端本地网络,即本地局域网和本地网络提供商网络。针对该区域异常,客户端本地网络相关节点问题,请对本地网络进行排查分析;本地网络提供商网络相关节点问题,请向当地运营商反馈。
    • 区域 B:运营商骨干网络。针对该区域异常,可根据异常节点 IP 查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。
    • 区域 C:目标服务器本地网络,即目标主机归属网络提供商网络。针对该区域异常,需要向目标主机归属网络提供商反馈问题。
  2. 结合 Avg(平均值)和 StDev(标准偏差),判断各节点是否存在异常。
    • 若 StDev 很高,则同步观察相应节点的 Best 和 Wrst,来判断相应节点是否存在异常。
    • 若 StDev 不高,则通过 Avg 来判断相应节点是否存在异常。注意:上述 StDev  或者 不高,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。比如,如果 Avg 为 30 ms,那么,当 StDev 为 25 ms,则认为是很高的偏差。而如果 Avg 为 325 ms,则同样的 StDev(25 ms),反而认为是不高的偏差。
  3. 查看节点丢包率,若 Loss% 不为零,则说明这一跳网络可能存在问题。导致节点丢包的原因通常有两种:
    • 人为限制了节点的 ICMP 发送速率,导致丢包。
    • 节点确实存在异常,导致丢包。
  4. 确定当前异常节点的丢包原因。
    • 若随后节点均没有丢包,说明当前节点丢包是由于运营商策略限制所致,可以忽略。如前文链路测试结果示例图中的第 2 跳所示。
    • 若随后节点也出现丢包,说明当前节点存在网络异常,导致丢包。如前文链路测试结果示例图中的第 5 跳所示。说明:前述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,若当前节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳的丢包率为准。如前文链路测试结果示例图所示,在第 5、6、7跳均出现了丢包。所以,最终丢包情况,以第 7 跳的 40% 作为参考。
  5. 通过查看是否有明显的延迟,来确认节点是否存在异常。通过如下两个方面进行分析:
    • 若某一跳之后延迟明显陡增,则通常判断该节点存在网络异常。如前文链路测试结果示例图所示,从第 5 跳之后的后续节点延迟明显陡增,则推断是第 5 跳节点出现了网络异常。注意:高延迟并不一定完全意味着相应节点存在异常,延迟大也有可能是在数据回包链路中引发的,建议结合 反向链路测试 一并分析。
    • ICMP 策略限速 也可能会导致相应节点的延迟陡增,但后续节点通常会恢复正常。如前文链路测试结果示例图所示,第 3 跳有 100% 的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。

其它建议

  • 若数据包在目标地址出现了 100% 的丢包,建议对目标服务器的 安全策略配置 进行排查。
  • 若数据包出现了 循环跳转,导致无法到达目标服务器,建议联系相应节点归属运营商处理。
  • 若数据包在跳转后 无法收到任何反馈,建议结合反向链路测试作进一步确认,并联系相应节点归属运营商进行处理。
  • 阿里云中国大陆机房和其他国家或地区机房有网络通信的专线,为降低通信时候的丢包率,推荐使用高速通道
  • 若主机掉包和延迟非常高,建议作 mtr 双向测试,即本地到服务器的和服务器到本地的测试。无法远程登录时,请通过管理终端进行登录。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: