Brendan Gregg 开发了一个很棒的工具“tcpretrans”,它基于 Linux 内核的动态跟踪功能。他在这里解释了:https://www.brendangregg.com/blog/2014-09-06/linux-ftrace-tcp-retransmit-tracing.html
该工具利用 /sys/kernel/debug/tracing
动态跟踪发生的 TCP 重传。有没有办法将其转换为可用于此类目的的 DTrace 脚本。
最佳答案
从FreeBSD DTrace Network Stack试试这个:
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option switchrate=10Hz
dtrace:::BEGIN
{
printf(" %30s %-6s %30s %-6s %-6s %s\n\n", "SADDR", "SPORT",
"DADDR", "DPORT", "BYTES", "FLAGS");
}
tcp:::receive,
tcp:::send
{
printf(" %30s %-6u %30s %-6u %-6u (%s%s%s%s%s%s\b)\n",
args[2]->ip_saddr, args[4]->tcp_sport,
args[2]->ip_daddr, args[4]->tcp_dport,
args[2]->ip_plength - args[4]->tcp_offset,
(args[4]->tcp_flags & TH_FIN) ? "FIN|" : "",
(args[4]->tcp_flags & TH_SYN) ? "SYN|" : "",
(args[4]->tcp_flags & TH_RST) ? "RST|" : "",
(args[4]->tcp_flags & TH_PUSH) ? "PSH|" : "",
(args[4]->tcp_flags & TH_ACK) ? "ACK|" : "",
(args[4]->tcp_flags & TH_URG) ? "URG|" : "");
}
关于tcp - 跟踪 FreeBSD TCP 重传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73682343/