以下是我们想要懂得的情况:
- 一个数据包进入您计算机的收集客栈( RX )(例如在端口 8000 上)。 在端口 8000 对应的应用法度榜样接收之前被丢。
- 发送一个数据包( TX )。 在它大年夜您的机械发出之前被丢。
怎么知道数据包是否被丢弃?
我在 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
这里是输出! 它告诉我哪个内核函数损掉数据包,酷!
thomas graf 告诉我,可以应用 perf 监督 kfree_skb 事宜,这将告诉你什么时刻丢弃数据包(内核客栈产生的处所):
- 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)
推荐阅读
adb shell input keyevent 26 //模仿电源键 adb在开辟中调试是很常用的敕令,下面就来说说常用的adb敕令。adb shell pm clear com.aaron.test 如不雅指定ip 连接,一般为 adb conenct 172>>>详细阅读
本文标题:定位服务器数据丢弃包问题
地址:http://www.17bianji.com/lsqh/37286.html
1/2 1