国际腾讯云账号云服务器网络访问丢包问题解决办法!!

本文主要介绍可能引起云服务器网络访问丢包问题的主要原因,及对应排查、解决方法。下面一起了解腾讯云国际云服务器网络访问丢包问题解决办法:

可能原因

引起云服务器网络访问丢包问题的可能原因如下:

1.触发限速导致 TCP 丢包

2.触发限速导致 UDP 丢包

3.触发软中断丢包

4.UDP 发送缓冲区满

5.UDP 接收缓冲区满

6.TCP 全连接队列满

7.TCP 请求溢出

8.连接数达到上限

9.iptables policy 设置相关规则

前提条件

在进行问题定位及处理前需登录实例,详情请参见 登录 Linux 实例 及 登录 Windows 实例。

故障处理

触发限速导致 TCP 丢包

云服务器实例具备多种规格,且不同规格有不同的网络性能。当实例的带宽或包量超过实例规格对应的标准时,会触发平台侧的限速,导致丢包。排查及处理步骤如下:

1.查看实例的带宽及包量。

Linux 实例可执行 sar -n DEV 2 命令查看带宽及包量。其中,rxpck/s 和 txpck/s 指标是收发包量,rxkB/s 和 txkB/s 指标是收发带宽。

2.使用获取的带宽及包量数据对比 实例规格,查看是否达到实例规格性能瓶颈。

是,则需升级实例规格或调整业务量。

否,若未达到实例规格性能瓶颈,则可通过 提交工单 进一步定位处理。

触发限速导致 UDP 丢包

参考 触发限速导致 TCP 丢包 步骤,判断是否由实例规格性能瓶颈引起丢包。

1.是,则需升级实例规格或调整业务量。

2.若未达到实例规格性能瓶颈,则可能是由平台对 DNS 请求额外的频率限制引起。在实例整体带宽或包量达到实例规格的性能瓶颈时,可能会触发 DNS 请求限速而出现 UDP 丢包。可通过 提交工单 进一步定位处理。

触发软中断丢包

当操作系统监测到 /proc/net/softnet_stat 的第二列计数值在增长时,则会判断为"软中断丢包"。当您的实例触发了软中断丢包时,可通过以下步骤进行排查及处理:

查看是否开启 RPS:

1.开启,则内核参数 net.core.netdev_max_backlog 偏小时会引发丢包,需调大。内核参数详细信息请参见 Linux 实例常用内核参数介绍。

2.未开启,则查看是否为 CPU 单核软中断高,导致未能及时收发数据。若是,您可以:选择开启 RPS,使软中断分配更为均衡。

3.检查业务程序是否会引发软中断分配不均匀。

UDP 发送缓冲区满

若您的实例因 UDP 缓冲区不足而导致丢包时,可通过以下步骤进行排查处理:

1.使用 ss -nump 命令查看 UDP 发送缓冲区是否已满。

2.若是,则调大内核参数 net.core.wmem_max 和 net.core.wmem_default,并重启 UDP 程序以生效。内核参数详细信息请参见 Linux 实例常用内核参数介绍。

3.若仍存在丢包问题,则可通过 ss -nump 命令查看发送缓冲区并没有按预期的增大。此时需要检查业务代码是否通过 setsockopt 设置了 SO_SNDBUF。若是,则请修改代码增大 SO_SNDBUF。

UDP 接收缓冲区满

若您的实例因 UDP 缓冲区不足而导致丢包时,可通过以下步骤进行处理:

1.使用 ss -nump 命令查看 UDP 接收缓冲区是否已满。

2.若是,则调大内核参数 net.core.rmem_max 和 net.core.rmem_default,并重启 UDP 程序以生效。内核参数详细信息请参见 Linux 实例常用内核参数介绍。

3.若仍存在丢包问题,则可通过 ss -nump 命令查看接收缓冲区并没有按预期的增大。此时需要检查业务代码是否通过 setsockopt 设置了 SO_RCVBUF。若是,则请修改代码增大 SO_RCVBUF。

TCP 全连接队列满

TCP 全连接队列的长度取 net.core.somaxconn 及业务进程调用 listen 时传入的 backlog 参数,两者中的较小值。若您的实例发生 TCP 全连接队列满导致丢包时,可通过以下步骤进行处理:

1.调大内核参数 net.core.somaxconn。内核参数详细信息请参见 Linux 实例常用内核参数介绍。

2.检查业务进程是否传入了 backlog 参数。若是,则相应调大。

TCP 请求溢出

在 TCP 接收数据时,若 socket 被 user 锁住,则会将数据送到 backlog 队列。若此过程若失败,则会引起 TCP 请求溢出导致丢包。通常情况下,假设业务程序性能正常,则可参考以下方式从系统层面排查及处理问题:

检查业务程序是否通过 setsockopt 自行设置了 buffer 大小:

1.若已设置,且该值不够大,可以修改业务程序指定一个更大的值,或不再通过 setsockopt 指定大小。

说明setsockopt 的取值受内核参数 net.core.rmem_max 和 net.core.wmem_max 限制。调整业务程序的同时,可以同步调整 net.core.rmem_max 和 net.core.wmem_max。调整后请重启业务程序使配置生效。

2.若未设置,则可以调大 net.ipv4.tcp_mem、net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem 内核参数来调整 TCP socket 的水位。

内核参数修改请参见 Linux 实例常用内核参数介绍。

连接数达到上限

云服务器实例具备多种规格,且不同规格有不同的连接数性能指标。当实例的连接数超过实例规格对应的标准时,会触发平台的限速,导致丢包。处理步骤如下:

说明连接数指宿主机上保存的云服务器实例的会话数,包含 TCP、UDP 和 ICMP。该数值大于在云服务器实例上通过 ss 或 netstat 命令获取的网络连接数。

查看您实例的连接数,并对比 实例规格,查看是否达到实例规格性能瓶颈。

1.是,则需升级实例规格或调整业务量。

2.否,若未达到实例规格性能瓶颈,则可通过 提交工单 进一步定位处理。

iptables policy 设置相关规则

在云服务器 iptables 未设置相关规则的情况下,可能是 iptables policy 相关规则设置导致到达云服务器的包都被丢弃。处理步骤如下:

1.执行以下命令,查看 iptables policy 规则。

iptables -L | grep policy

iptables policy 规则默认为 ACCEPT。若 INPUT 链 policy 非 ACCEPT,则会导致所有到服务器的包都被丢弃。例如,若返回如下结果,表示进入云服务器的包都会被 drop。

Chain INPUT (policy DROP)

Chain FORWARD (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

1.执行如下命令,按需调整 -P 后的值。

iptables -P INPUT ACCEPT

2.调整后,可再次执行 步骤1 命令查看,应返回如下结果:

Chain INPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

相关推荐
星恒讯工业路由器1 小时前
AGV集群通信架构:从单点到百台级调度的挑战与对策
网络·物联网·信息与通信·工业物联网·通信架构·agv集群·实时调度
tg_xianheyun3 小时前
CDN节点分布如何影响网页加载速度和用户体验
服务器·cdn加速·全球访问优化
夜月yeyue3 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
lsh曙光3 小时前
延时at指令和定时cron指令
linux·服务器·网络
treesforest3 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
XR1234567884 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
萧瑟余晖5 小时前
Java深入解析篇九之NIO详解
java·网络·nio
夏殇之殁5 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
我不管我就要叫小猪5 小时前
嵌入式Linux----网络通信
linux·运维·服务器
小王C语言5 小时前
【7. 实现登录注册模块】:实现会话管理、注册/登录/退出 API
网络·c++