tcp - 跟踪 FreeBSD TCP 重传

标签 tcp freebsd dtrace

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/

相关文章:

macos - dtrace 中的 "dynamic variable drops with non-empty dirty list"是什么意思?

macos - 如何让 strace 以非 root 权限运行跟踪命令?

go - 尝试在 golang 中使用 io.CopyN() 读取时客户端卡住了

multithreading - Windows Azure 辅助角色内的最大并发线程数

c# TCP/IP 服务器和客户端

system-calls - kevent() 在哪里验证其文件描述符?

c++ - 在 C++ 中使用 Dtrace 设置我自己的探测器

java - mina writefuture 返回 written=true 尽管失败

mysql - 无法使用 root(或任何帐户)在 MySQL 中授予权限 - "Access denied for user ' root'@'localhost' "

python - 如何在 freeNAS 操作系统上将 python 2.7 更新到 3.5