给定一个 linux TCP 套接字的索引节点(通过 获得/proc/<pid>/fd
),是否有一种更快的方法来查找我可以/proc/net/tcp
从此套接字获取的信息?
我编写了一个故障排除工具,用于监视进程并打印有关 IO 操作的实时信息(strace
类型信息收集到更高级别的抽象中并以不太原始的方式呈现),但在负载很重的网络服务器上,我发现它花费的时间查找套接字信息(例如外部地址/端口)是令人望而却步的,因为它的大小非常大/proc/net/tcp
(我当前正在查看的服务器上大约有 2MB)。
我可以通过缓存来管理这个问题,但这必然会引入延迟,并使我想知道“API”的荒谬性,它需要读取和解析 2MB 的 ASCII 文本才能在套接字上查找信息。
答案1
这是一个链接libnetfilter_conntrack。您必须使用支持直接从库调用 C 函数的语言重新编写程序。但我认为这个库将拥有您所需的钩子,可以比解析该文本文件更快地获取您想要的数据。
这就是iptstate
程序用来完成其任务。