我正在寻找对“sar -n SOCK”输出的 totsck 列的解释
09:44:06 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
09:44:09 PM 580 18 5 0 0 1
09:44:10 PM 580 18 5 0 0 0
09:44:11 PM 580 18 5 0 0 0
Average: 580 18 5 0 0 1
Run Code Online (Sandbox Code Playgroud)
这显然不是 tcp/udp/raw 套接字的总和。我遇到的唯一其他解释是它是 sockets plus
sysctl fs.file-nr
Run Code Online (Sandbox Code Playgroud)
但在我的测试盒上
fs.file-nr = 5632 0 803168
Run Code Online (Sandbox Code Playgroud)
非常感谢精确的解释。
谢谢
编辑 2:所以显然 totsck 相当于
cat /proc/net/sockstat
Run Code Online (Sandbox Code Playgroud)
这就引出了一个问题,那里算什么。我找到了这个,但最后它只建议询问编写那段特定内核代码的人。
编辑(用于域套接字记帐):
[root@fedora16 fs]# netstat --protocol unix| wc -l
413
[root@fedora16 fs]# sar -n SOCK 1 1
Linux 3.3.1-5.fc16.x86_64 (fedora16) 06/21/2012 _x86_64_ (4 CPU)
10:03:25 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
10:03:26 PM 598 6 5 0 0 3
Average: 598 6 5 0 0 3
Run Code Online (Sandbox Code Playgroud)
还有 UNIX 域套接字(STREAM 和 DGRAM),它们似乎被系统使用的套接字总数考虑在内。UNIX 域套接字被进程引用为文件系统中的 inode。有很多东西仍然出于各种目的使用 UNIX 域套接字,所以sar
选择它。检查输出netstat -a
以查看系统上打开了多少 UNIX 域套接字。
fs.file-nr
是最大文件句柄的数量,虽然重要与您在sar
输出中看到的内容无关。
编辑:请考虑sar
基本上读取/proc/net/sockstat
并计算该计数的平均值或报告历史值。似乎/proc/net/sockstat
从两个地方(2.6.27 的内核源)获取数据,位置是net/socket.c
line: 2324 和net/ipv4/proc.c
line 54 及以下,总数来自第一个位置,其余来自第二个位置。通过net
结构还可以揭示哪些套接字被计算/计算并打印到 proc 文件系统中。
79 * @SOCK_STREAM: stream (connection) socket
80 * @SOCK_DGRAM: datagram (conn.less) socket>
81 * @SOCK_RAW: raw socket
82 * @SOCK_RDM: reliably-delivered message>
83 * @SOCK_SEQPACKET: sequential packet socket
84 * @SOCK_DCCP: Datagram Congestion Control Protocol socket
Run Code Online (Sandbox Code Playgroud)