VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
热网互联2025年促销活动
hostkvm优惠促销活动
zji优惠促销活动

请记住,没有风险的数据包丢失调试经验(占数据包丢失的90%)

主机参考: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速度学习教程(向初学者学习)。需要它的朋友可以保存和下载并学习它!

下载

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:请记住,没有风险的数据包丢失调试经验(占数据包丢失的90%) https://zhujicankao.com/148482.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 请记住,没有风险的数据包丢失调试经验(占数据包丢失的90%)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!