网络收包统计
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于