![为什么读取 /proc/net/tcp 需要很长时间 ss 很快就会返回有关连接表的相同类型的数据?](https://linux22.com/image/89199/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%AF%BB%E5%8F%96%20%2Fproc%2Fnet%2Ftcp%20%E9%9C%80%E8%A6%81%E5%BE%88%E9%95%BF%E6%97%B6%E9%97%B4%20ss%20%E5%BE%88%E5%BF%AB%E5%B0%B1%E4%BC%9A%E8%BF%94%E5%9B%9E%E6%9C%89%E5%85%B3%E8%BF%9E%E6%8E%A5%E8%A1%A8%E7%9A%84%E7%9B%B8%E5%90%8C%E7%B1%BB%E5%9E%8B%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
在 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。