【问题标题】:Linux: proc/net/sockstat tcp mem more and more largerLinux:proc/net/sockstat tcp mem越来越大
【发布时间】:2017-03-24 06:18:19
【问题描述】:

现在,我们的系统通过/proc/net/sockstat 发现hang 和tcp mem 越来越大。当挂起出现时,将打印:

“tcp:太多孤立的套接字”

sockstat,我们知道socket很少,但是消耗了1500个page mem,为什么?

所以我有两个问题:

  1. 如何知道哪个进程消耗了 tcp socket 内存?
  2. 如何避免“tcp:too many of orphaned sockets”?

(1)

~ # cat /proc/net/sockstat

套接字:已使用 56 个

TCP:正在使用 6 orphan 0 tw 1 alloc 8 mem 1510

UDP:正在使用 8 内存 6

UDPLITE:正在使用 0

RAW:使用 4

FRAG:正在使用 0 内存 0

(2)

~ # cat /proc/sys/net/ipv4/tcp_mem

900 1200 1800

~ # cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 87380

~ # cat /proc/sys/net/ipv4/tcp_wmem

4096 16384 65536

【问题讨论】:

    标签: linux sockets tcp


    【解决方案1】:

    对于#1,套接字的内存消耗是

    • 套接字描述符
    • 内核内发送队列(等待 NIC 发送的内容)
    • 内核接收队列(已接收但尚未被用户空间读取的内容)。

    this post 与此处相关)

    对于/proc/net/sockstat 的示例输出,套接字的数量很少,因此请检查它们的发送/接收队列的大小。您可以使用netstat -tanpss -tp 之类的命令来执行此操作。请记住,发送和接收缓冲区大小显示为例如ss -m 是最大值(受tcp_rmem 和`tcp_wmem 约束),而不是当前分配的值。

    对于#2,this post 解释说“太多的孤立套接字”是由于孤立的数量超过了/proc/sys/net/ipv4/tcp_max_orphans 中的值造成的,尽管某些类型的“坏”套接字比其他类型的惩罚更多,所以即使您低于限制 2 倍或 4 倍,您也可能遇到错误。

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 2017-10-15
      • 2019-07-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多