41.3. 使用 SystemTap 监控网络数据包丢弃
Linux 中的网络堆栈可以丢弃由于各种原因的数据包。有些 Linux 内核包括一个跟踪点(tracepoint), kernel.trace ("kfree_skb") '
,用于跟踪数据包被丢弃的位置。
dropwatch.stp
SystemTap 脚本使用 kernel.trace ("kfree_skb")
来跟踪数据包丢弃;脚本总结了每 5 秒间隔丢弃数据包的位置。
先决条件
- 如安装 SystemTap 所述,已安装了 SystemTap。
流程
运行
dropwatch.stp
脚本:# stap --example dropwatch.stp
运行
dropwatch.stp
脚本 15 秒的结果类似如下:Monitoring for dropped packets 51 packets dropped at location 0xffffffff8024cd0f 2 packets dropped at location 0xffffffff8044b472 51 packets dropped at location 0xffffffff8024cd0f 1 packets dropped at location 0xffffffff8044b472 97 packets dropped at location 0xffffffff8024cd0f 1 packets dropped at location 0xffffffff8044b472 Stopping dropped packet monitor
注意要使数据包的位置更有意义,请参阅
/boot/System.map-$ (uname -r)
文件。此文件列出了每个功能的起始地址,允许您将dropwatch.stp
脚本输出中的地址映射到特定功能名称。以下的/boot/System.map-$ (uname -r)
文件的代码片段中,地址0xffffffff8024cd0f
映射到功能unix_stream_recvmsg
,地址0xffffffff8044b472
映射到功能arp_rcv
:[...] ffffffff8024c5cd T unlock_new_inode ffffffff8024c5da t unix_stream_sendmsg ffffffff8024c920 t unix_stream_recvmsg ffffffff8024cea1 t udp_v4_lookup_longway [...] ffffffff8044addc t arp_process ffffffff8044b360 t arp_rcv ffffffff8044b487 t parp_redo ffffffff8044b48c t arp_solicit [...]