250402 - 网络问题调试

网络收包统计

ip -s link show dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 2000
link/ether 4a:9a:ea:2f:1f:37 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
241481201 209351 0 345 0 0
TX: bytes packets errors dropped carrier collsns
238222560 161688 0 0 0 0

环形缓冲区大小

环形缓冲区是网卡硬件级别的缓冲区,用于临时存储传入和传出的数据包。当这些缓冲区太小时,在高负载下可能无法处理所有数据包,导致丢包。

检查环形缓冲数组大小

ethtool -g eth0 # 查看环形缓冲区设置

sudo ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: 1024 RX Mini: n/a RX Jumbo: n/a TX: 1024 Current hardware settings: RX: 512 RX Mini: n/a RX Jumbo: n/a TX: 512

显示了网卡的环形缓冲区(ring buffer)设置:硬件支持最大 1024 的接收(RX)和发送(TX)环形缓冲区大小,但当前只使用 - 512。

将环形缓冲区大小增加到硬件支持的最大值

sudo ethtool -G eth0 rx 1024 tx 1024

修改网络缓冲区设置:临时/开机自动运行

# 增加最大接收缓冲区大小 echo 16777216 > /proc/sys/net/core/rmem_max # 增加最大发送缓冲区大小 echo 16777216 > /proc/sys/net/core/wmem_max # 增加默认接收缓冲区大小 echo 8388608 > /proc/sys/net/core/rmem_default # 增加默认发送缓冲区大小 echo 8388608 > /proc/sys/net/core/wmem_default # 修改TCP特定的缓冲区大小 (min default max) echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmem echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_wmem # 增加网络设备的最大积压队列 echo 5000 > /proc/sys/net/core/netdev_max_backlog ip link set eth0 txqueuelen 2000
  • 网络
    142 引用 • 184 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...