iproute包中的“ss”命令;为什么要查询slab表中的timewait套接字?

iproute包中的“ss”命令;为什么要查询slab表中的timewait套接字?

如果这不是解决这个问题的最佳论坛,请原谅我,但它似乎与内核比与编程本身更相关。

我正在编写一个脚本来查询系统的开放端口,以便我们可以绘制图表并监视统计数据。为此,我使用 iproute 包中的“ss”命令。如果执行,ss -s|grep estab您将收到类似以下的输出:

TCP:   296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0

我的问题与 timewait 变量有关,它显示计算出的套接字处于 TIME_WAIT 状态。当我试图找出斜线后引用的数字时,它变成了搜索源代码的旋风式冒险,最终导致我找到了以下代码片段:

printf("TCP:   %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
       s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
       sn.tcp_estab,
       s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
       s.tcp_orphans,
       slabstat.tcp_syns,
       s.tcp_tws, slabstat.tcp_tws,
       slabstat.tcp_ports
       );

我必须承认,我对“slabstat”含义的搜索最终导致我了解了slab 缓存及其在/proc/slabinfo 的报告接口。

问题:slabtable 与 TIME_WAIT 套接字计算有什么关系?我无法弄清楚为什么会报告这个数字,因为每次我在尝试过的每台服务器上运行该命令时,该数字始终为零。

答案1

它看起来像是tcp_tw_buckets最终被轮询的内容,这是一个从 Linux 2.6.12 开始被删除的结构

所以最后一个数字可能总是 0,除非它是在 7 年的内核上。

至于查询平板,据我所知,它比其他可用方法快得多。

相关内容