主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
将我的服务器从CENTOS 5升级到CentOS 7(内核版本3.10.0-693)后,我遇到了服务器上的一个主要问题。接收到(RX)数据时,网络卡ETH0会定期丢失数据包。
首先,我使用“ Ethtool”工具进行检查并进行检查,因为看来网络卡的环形缓冲区可能没有足够的空间。 0TX:256
环形缓冲区看起来很小,但是当前的硬件设置已达到预设最大值,无法进一步扩展。 我继续使用“ Ethtool”核对,以进一步检查网卡中是否存在数据包丢失问题:
shell> ethtool -s eth0no stats availableshell> ethtool -i eth0driver:virtio_netversion:1.0.0firmware-version:Extension-rom-version:bus:nosupports-test:nosupports-eeprom-access:nosupports-register-dump:nosupports-priv-flags:no
The results show that the virtio_net driver in KVM does not support statistics, but there are other ways to get the information.> Sys -Name ETH0/SYS/DEVICES/PCI0000: 00/0000: 00: 04.0/VIRTIO1/NET/ETH0/SYS/CLASS/NET/ETH0SHELL> CD /SYS/DEVICES/PCI0000: 00/0000: 00: 04.0/VIRTIO1/NET/ETH0SHELL> CD STATISTICISTICTICSHELL> GREEP. * | Grep rxrx_bytes: 633037730314rx_compressed: 0rx_crc_errors: 0rx_dropped: 206975rx_errors: 0rx_fifo_errors: 0rx_frame_ Error: 0rx_length_errors: 0rx_missed_errors: 0rx_nohandler: 0rx_over_errors: 0rx_packets:4717658080
rx_dropped的值不是零。诸如RX_ERRORS之类的错误计数器为零,表明环缓冲区不会溢出。 因此,我们可以假设该网卡不受伤害将数据传递到操作系统,并且数据包损耗问题位于操作系统级别。
我使用Drop Watch工具来确定操作系统在何处丢失数据包:
shell> dropwatch -l kasinitialization kallSyms dbdropwatch>开始监视。 ipv6_rcV+3AD (0xffffffffffff81643d7d) 75 drop TCP_V4_RCV+87 (0xffffffffffffff815f0197) 426 drop +50 (0xffffffffffff8157a740) 235 drop (0xffffffffffff815e4fb0) 137 TCP_V4_RCV+87 (0xFFFFFFFFFFFFFFFFFFFFFFFFFFF0197)137滴IPV6_RCV+3AD(0XFFFFFFFFFFFFFFFFFFFFFFFFFFFF581643D7D)11滴(__netif_receive_receive_receive_receive_receive_receive_receive_skb_skb_core __netive_skb_core /proc /kallsymsffffffffff815869b0 t __netif_receive_skb_corefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff net_rx_actionffffffffffffffff581587bb0 t dev_gro_receive
通过监视对KFREE_SKB的呼叫,请观察监视器操作系统的潜在数据包丢失行为。 我们的问题是关注__netif_receive_skb_core函数,因为每2秒删除一个数据包(数据包丢失地址0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5815869b0 and ffffffffffffffffffffffffffffffff581587170)。
__netif_receive_skb_core函数linux源代码在检查Linux源代码的定义中,以查看数据包丢失的原因。 降低; ... drop:atomic_long_inc(&skb--> dev-> rx_dropped); KFREE_SKB(SKB); / *Jamal,现在您无法解释并解释如何使用此方法。 🙂 */ ret = net_rx_drop; ...}静态布尔skb_pfmemalloc_protocol(struct sk_buff *skb){switch(skb--> stroment){case __conconstant_htons(eth_p_arp):case __conconstant_htons(eth_p_ip):ns(eth_p_ipv6):案例__constant_htons(eth_p_8021q):案例__ conconstant_htons(eth_p_8021ad):返回true;默认值:返回false。 }}
如果pfmemalloc为真,并且SKB_PFMemalloc_protocol函数确定不支持数据包协议,则丢失了数据包。 此外,在您的代码中调用KFREE_SKB,以验证DropWatch的工作原理。
我使用SystemTap工具来确定问题的协议类型的数据包丢失:
#! /usr/bin/env stapprobe kernel.function(“ __ Netif_receive_skb_core”)。 label(“ drop”){printf(“ 0x%04x \ n”,ntohs($ skb->协议))}
根据Linux源代码分析,SKB_PFMEMALLOC_PROTOCOL支持的软件包协议是:blue Blue Book扩展标头 */#ETH_P_8021AD 0x88A8/ *802.1AD服务VLAN */
SystemTap脚本检测到的软件包协议为0x0004,即路由器发出的802.3软件包:
包软件包已被系统不支持。
实际上,只要您了解所讨论的路线,就可以使用TCPDUMP捕获系统丢弃的数据包。只需打印以太型数据包以排除操作系统支持的协议软件包即可。其余的丢失的数据包:
shell> tcpdump -i eth0 -e | grep -v -e'Arp | IP | 802.1q | 802.1AD'802.3, length 105: LLC, DSAP STP (0x42) personal, SSAP STP (0x42) command, Ctrl 0x03: STP 802.1S, STP 802.1S, cents, cist berss, renged, length of ond be new sheed fored Different behavior in handling such issues: If you face a package that does not support a protocol, the newer and older versions of CentOS会丢弃它,但是较旧的版本不会更新数据包丢失计数器(RX_Dropped),并且较新版本将更新数据包损耗计数器(RX_Dropped)。我们不会解释具体的细节。如果您有兴趣,可以自己检查一下。
PHP速度学习免费视频教程(向初学者学习)
如何学习PHP? 如何开始PHP? 我在哪里可以学习PHP? 如何立即学习PHP? 不用担心,这是PHP速度学习教程(向初学者学习)。需要它的朋友可以保存和下载并学习它!
下载
这几篇文章你可能也喜欢:
- 如何在云服务器上部署II(如何为云服务器配置Web服务器)
- 更改PHPCMS模板后,将不会显示该页面。如何解决问题?
- 在Tea Restaurant Mini计划开始一个月后,双重表演的秘诀是揭示的! (茶餐厅用餐)
- 解决premierepro不完整或乱码的字幕问题
- 帝国如何处理CMS图像上传失败并提示“文件大小超过限制”?
本文由主机参考刊发,转载请注明:请记住,没有风险的数据包丢失调试经验(占数据包丢失的90%) https://zhujicankao.com/148482.html
评论前必须登录!
注册