【问题标题】:Get network connections from /proc/net/sockstat从 /proc/net/sockstat 获取网络连接
【发布时间】:2015-04-09 10:06:58
【问题描述】:

我在显示套接字的 /proc 中找到了此信息:

$ cat /proc/net/sockstat 
sockets: used 8278
TCP: inuse 1090 orphan 2 tw 18 alloc 1380 mem 851
UDP: inuse 6574
RAW: inuse 1
FRAG: inuse 0 memory 0

您能帮我找出这些值的含义吗?这些值是否足够可靠或者我需要在其他地方搜索?

还有其他方法可以在 Linux 中查找有关 TCP/UDP 连接的信息吗?

【问题讨论】:

  • 它都在内核源代码的某个地方......
  • @MarcB 我也同意,但应该有一些简单的方法来获取这些信息。
  • 确实如此。这可能是你对 OSS 世界的贡献……一个记录所有这些东西的网站。

标签: linux sockets networking proc


【解决方案1】:

据我了解,/proc/net/sockstat 是查找该信息的最可靠的地方。我自己经常使用它,并且只有一台服务器来管理 1MM 的同时连接,这是我唯一可以可靠地统计这些信息的地方。

【讨论】:

    【解决方案2】:

    你能帮我找出这些值的含义吗?

    根据代码here,这些值是正在使用的套接字数(TCP / UDP)、孤儿 TCP 套接字数(应用程序没有更多句柄的套接字,它们已经调用了close())。 TCP tw 我不确定,但是根据结构名称(tcp_death_row),这些套接字会在不久的将来被彻底销毁吗? sockets 表示分配的套接字数(据我了解,考虑不同状态的 TCP 套接字),mem 是 TCP 套接字分配的页数(内存使用情况)。

    This 文章围绕这个话题进行了一些讨论。

    【讨论】:

    • 仅供参考,我相信tw 是处于 TIME_WAIT 状态的 TCP 套接字,但不确定。与ss -snetstat -| grep -c TIME_WAIT 的输出相比,至少数字匹配..
    【解决方案3】:

    您可以使用netstat 命令,该命令本身利用/proc 文件系统,但打印的信息对人类来说更易读。

    例如,如果要显示当前的 tcp 连接,可以发出以下命令:

    netstat -t
    

    查看man netstat 了解众多选项。

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多