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


15

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

我正在编写一个脚本,用于查询系统的开放端口,以便我们可以绘制图形并监视统计信息。为此,我使用了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”的理解最终导致了我对/ sproc / slabinfo中的slab缓存及其报告接口的了解。

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



该代码仅显示了在平板中分配了多少个等待套接字。IMO它只是帮助确定内存的使用情况
乌尔里希Dangel

Answers:


0

看起来tcp_tw_buckets是最终被轮询的东西,它是从Linux 2.6.12开始删除的结构

因此,除非使用7年的内核,否则最后一个数字可能始终为0。

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


如果它在2.6.12之前的内核上,则值slabstat.tcp_tws等于s.tcp_tws吗?这两个值之间有什么区别吗?(一个来自/ proc / net / sockstat,一个来自/ proc / slabinfo)
ruanhao 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.