Linux丢包故障的定位与解决(自驾_ROS)

参考【https://www.cnblogs.com/zhangmingda/p/11671970.html】

链路层问题排查

netstat -i 查看关注的接口RX/TX-DRP和/RX/TX-OVR是否存在丢包

cat /proc/net/dev查看Receive与Transmit的fifo列,如果不为0说明存在ring buffer到达/生成速率高于内核处理速率,如果fifo数持续增大,确认CPU中断是否分配均匀:

cat /proc/interrupts | grep eth0 #获取中断号

cat /proc/irq/$eth0_irq_number

也可以尝试增加Ring Buffer的大小,通过ethtool -g eth0可以查看网卡设备Ring Buffer最大值,ethtool -G修改Ring Buffer当前设置,一般不建议这么做

检查有无内核backlog队列(内核从适配器收到包后交由协议栈处理前的缓冲队列)溢出情况:

cat /proc/net/softnet_stat

每一行代表每个CPU核的状态统计,从CPU0依次往下

每一列代表一个CPU核的各项统计:第一列代表中断处理程序收到的包总数;第二列即代表由于netdev_max_backlog队列溢出而被丢弃的包总数

解决方法:调整net.core.netdev_max_backlog

反向路由过滤:略,一般能ping通就不存在此问题

半连接队列溢出:通过netstat -natp | grep SYN_RECV | wc -l查看当前半连接数,与系统最大半连接数设置对比tcp_max_syn_backlog

链接跟踪数:

# 查看nf_conntrack表最大连接数

$ cat /proc/sys/net/netfilter/nf_conntrack_max

65536

# 查看nf_conntrack表当前连接数

$ cat /proc/sys/net/netfilter/nf_conntrack_count

7611

PAWS机制:netstat -s |grep -e "passive connections rejected because of time stamp" -e "packets rejects in established connections because of timestamp"

$ sysctl net.ipv4.tcp_tw_recycle

net.ipv4.tcp_tw_recycle = 1

$ sysctl net.ipv4.tcp_timestamps

net.ipv4.tcp_timestamps = 1

如果同时为1可能有问题

TIME_WAIT过高,设置tcp_tw_recycle = 1

开启 快速重传

mtr实时查看丢包率

ss -anti |grep -B 1 retrans 查看重传的具体端口

网络层问题排查

netstat -s

dmesg | grep -E "nf_conntrack:|table full|dropping package"

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值