为什么读取 /proc/net/tcp 需要很长时间 ss 很快就会返回有关连接表的相同类型的数据?

为什么读取 /proc/net/tcp 需要很长时间 ss 很快就会返回有关连接表的相同类型的数据?

在 Linux 2.6.32 上,如果您在负载非常大的系统(例如 Web 服务器)上读取(例如 cat)/proc/net/tcp,您会发现读取 100K 条目需要超过 30 秒。那是很长一段时间了。

幕后发生了什么?是否有锁定发生?

许多人提到“ss”命令的速度。 'ss' 命令做了什么而 'cat /proc/net/tcp' 或 'netstat' 没有做这使得它更快?

答案1

ss使用AF_NETLINK套接字层与内核对话。这是一个较低级别的协议,但允许快速且大块地传输数据。 CentOS 7 上的快速strace显示它将传输窗口设置为 1Mb。

相关内容