千家信息网

如何解决定位服务器数据丢弃包问题

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何解决定位服务器数据丢弃包问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当某个服务器发生数据丢包时,它们肯定是由于某种原因。我
千家信息网最后更新 2026年11月02日如何解决定位服务器数据丢弃包问题

如何解决定位服务器数据丢弃包问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

当某个服务器发生数据丢包时,它们肯定是由于某种原因。我们如何来分析为什么数据包丢失。

以下是我们想要了解的情况:

  • 一个数据包进入您计算机的网络堆栈( RX )(例如在端口 8000 上)。 在端口 8000 对应的应用程序接收之前被丢。

  • 发送一个数据包( TX )。 在它从您的机器发出之前被丢。

本文不关注"数据包在网络传输过程丢了,让我们用 traceroute / 通过计数 TCP 重传进行诊断"(虽然这也很重要)!

怎么知道数据包是否被丢弃?

我在 Twitter 上提问,得到了非常有用的答案 "看 netstat -i !"这是我的笔记本电脑上运行得到的结果:

bork@kiwi~> sudo netstat -i Kernel Interface table Iface       MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg docker0    1500 0         0      0      0 0             0      0      0      0 BMU enp0s25    1500 0   1235101      0    242 0        745760      0      0      0 BMRU lo        65536 0     21558      0      0 0         21558      0      0      0 LRU nlmon0     3776 0    551262      0      0 0             0      0      0      0 ORU

看起来有一些收到的( RX )数据包在 enp0s25 (我的无线网卡)上丢失了。 但是没有 TX 包丢失。

有人也告诉我,运行 ethtool -S 会有帮助,但是我的 ethtool 没有 -S 选项。

怎么知道为什么数据包被丢弃

通过谷歌搜索,发现一个很酷的工具叫 dropwatch 。 没有现成的 Ubuntu 安装软件包,但可以通过 github 下载:

https//github.com/pavel-odintsov/drop_watch

以下是我可以编译的说明:

sudo apt-get install -y libnl-3-dev libnl-genl-3-dev binutils-dev libreadline6-dev git clone https://github.com/pavel-odintsov/drop_watch cd drop_watch/src vim Makefile # comment out the -Werror argument to gcc make

这里是输出! 它告诉我哪个内核函数丢失数据包,酷!

sudo ./dropwatch -l kas Initalizing kallsyms db dropwatch> start Enabling monitoring... Kernel monitoring activated. Issue Ctrl-C to stop monitoring  1 drops at tcp_v4_do_rcv+cd (0xffffffff81799bad) 10 drops at tcp_v4_rcv+80 (0xffffffff8179a620) 1 drops at sk_stream_kill_queues+57 (0xffffffff81729ca7) 4 drops at unix_release_sock+20e (0xffffffff817dc94e) 1 drops at igmp_rcv+e1 (0xffffffff817b4c41) 1 drops at igmp_rcv+e1 (0xffffffff817b4c41)

用perf监控丢弃的数据包

还有另一个很酷的方法,用来调试发生什么。

thomas graf 告诉我,可以使用 perf 监视 kfree_skb 事件,这将告诉你什么时候丢弃数据包(内核堆栈发生的地方):

sudo perf record -g -a -e skb:kfree_skb sudo perf script

关于如何解决定位服务器数据丢弃包问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 问题 服务器 服务 帮助 定位 内核 堆栈 方法 更多 端口 网络 分析 解答 运行 易行 重要 简单易行 事件 函数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 中关村互联网 科技集团 金融科技与互联网金融 互联网与新科技 互联网科技的未来发展 互联网科技创新企业排名 中国最先进互联网科技公司 科技互联网的估值 互联网金融中的现代科技 佛山市拉法互联网科技有限公司 互联网第三次科技革命特征 电子商务与互联网科技的关系 张召忠谈中国互联网科技 广西科技产业互联网是什么 互联网金融运营模式中的金融科技 西安左小互联网科技有限公司 悟空问答互联网科技 广州三三互联网科技有限公司 青岛易易互联网科技 宁波允成互联网科技有限公司 精品咖啡豆 盈实互联网科技 壹账通互联网科技 隆华科技工业互联网 成都铂石互联网科技做什么的 青岛科技大学互联网大赛研究生 山东有哪些互联网科技公司 互联网金融科技公司的优势 广东工业互联网大赛深圳学泰科技 黑龙江互联网科技公司
0