解决linux下网络丢包问题处理
最近业务上老有问题,查看发现overruns值不断增加,学习了一下相关的知识。
发现数值也在不停的增加。G 了一下,发现这些 errors, dropped, overruns 表示的含义还不大一样。
eth2 Link encap:Ethernet HWaddr 00:8C:FA:F1:DA:78
inet addr:10.249.2.112 Bcast:10.249.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26191508237 errors:0 dropped:0 overruns:45732243 frame:0
TX packets:20141298524 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4684832167216 (4.2 TiB) TX bytes:4670328443919 (4.2 TiB)
Memory:c7200000-c7280000
RX errors: 表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
RX dropped: 表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。
RX overruns: 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0),没有做 affinity 而造成的丢包。
RX frame: 表示 misaligned 的 frames。
1、先查看硬件情况
一台机器经常收到丢包的报警,先看看最底层的有没有问题:
# ethtool eth2 | egrep 'Speed|Duplex'
Speed: 1000Mb/s
Duplex: Full
# ethtool -S eth2 | grep crc
rx_crc_errors: 0
Speed, Duplex, CRC 之类的都没问题,基本可以排除物理层面的干扰。
2、通过 ifconfig 可以看到 overruns 字段在不停的增大:
for i in `seq 1 100`; do ifconfig eth2 | grep RX | grep overruns; sleep 1; done
这里一直增加
RX packets:26191785302 errors:0 dropped:0 overruns:45732243 frame:0
3、查看buffer大小
找了一些国外的文章,可以通过ethtool来修改网卡的buffer size ,首先要网卡支持,我的服务器是是INTEL 的1000M网卡,我们看看ethtool说明
-g –show-ringQueries the specified ethernet device for rx/tx ring parameter information.
-G –set-ringChanges the rx/tx ring parameters of the specified ethernet device.
查看当前网卡的buffer size情况ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
4、修改buffer size大小
ethtool -G eth2 rx 2048
ethtool -G eth2 tx 2048
查看丢包
[root@appserver1 network-scripts]# cat /proc/net/dev | column -t
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:1697064305645 4937104295 0 0 0 0 0 0 1697064305645 4937104295 0 0 0 0 0 0
eth0:72829268758 343814516 0 21338 0 0 0 9764241 74743576507 418943369 0 0 0 0 0 0
eth1:5826509023 48719872 0 0 0 0 0 11358883 127451707 1107964 0 0 0 0 0 0
eth2:4684766978372 26191366713 0 0 45732243 0 0 278436828 4670300836866 20141168183 0 0 0 0 0 0
eth3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
bond0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[root@appserver1 network-scripts]# netstat -i | column -t
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth2 1500 0 26191244868 0 0 45732243 20141056331 0 0 0 BMRU
lo 16436 0 4937053994 0 0 0 4937053994 0 0 0 LRU
问题:接受队列溢出产生错误,当抵达的包多于内核可以处理的包时,计算机会产生漫溢(overruns)。输入队列达到其上限(max_backlog)时,多抵达的那些包会全部被丢弃掉。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS安装setup工具
在CentOS中可以使用setup配置工具很方便地配置防火墙、网络、系统服务等配置项。如果采用最小化安装CentOS的话,默认没有安装该工具。下面我们手动安装下setup工具。 1、安装setuptool # yum install setuptool 2、安装防火墙设置 # yum install system-config-securitylevel-tui 3、安装网络设置 # yum install system-config-network-tui 4、安装系统服务管理 # yum install ntsysv
- 下一篇
CentOS命令-parted命令
[root@compute ~]#parted /dev/md126 (parted) mkpart swift 702G-803G#创建swfit分区,从702G到803G [root@compute ~]#mkfs.xfs /dev/md126p5#将磁盘格式化成xfs文件系统 注:这是我的实验环境 实例1: [root@compute ~]#parted /dev/sdb (parted) mklabel gpt #将MBR磁盘格式化成gpt (parted) print (parted)mkpart swift 702G 803G#创建swfit分区,从702G到803G (parted) print (parted) quit#退出
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境