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

  • 网络
    140 引用 • 184 回帖 • 4 关注

相关帖子

欢迎来到这里!

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

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