為什麼讀取 /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。

相關內容