【问题标题】:Is there a way to find out the total memory used by UDP sockets on a system有没有办法找出系统上 UDP 套接字使用的总内存
【发布时间】:2011-06-28 23:08:55
【问题描述】:

通过监控 /proc/net/sockstat 或 /proc/net/protocols,我可以实时了解系统中 TCP 套接字使用的内存总量:

[gpadmin@sdw4 ~]$ cat /proc/net/sockstat
sockets: used 240
TCP: inuse 55 orphan 0 tw 0 alloc 69 mem 2171
UDP: inuse 22 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0
[gpadmin@sdw4 ~]$ cat /proc/net/sockstat
sockets: used 240
TCP: inuse 55 orphan 0 tw 0 alloc 69 mem 761
UDP: inuse 22 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0

以上指标显示 TCP 套接字使用的内存,但 UDP 套接字指标标记为 0。有没有办法找出这些信息?是否有任何 /proc/net 文件捕获此信息?

提前致谢。

【问题讨论】:

    标签: sockets udp memory-management


    【解决方案1】:

    会不会是你流量少?

    这是在我的机器上,在 3 个端口上每秒接收 400 个 UDP 数据包(有第 4 个 UDP 流,但我不使用它)。

    # cat /proc/net/sockstat
    sockets: used 32
    TCP: inuse 6 orphan 0 tw 0 alloc 6 mem 1
    UDP: inuse 4 mem 3
    

    同一台机器,将这些 UDP 流提供给 HTTP 上的大量客户端:

    #cat /proc/net/sockstat
    sockets: used 7232
    TCP: inuse 7206 orphan 0 tw 0 alloc 7206 mem 405397
    UDP: inuse 4 mem 30
    

    HTTP 服务器是单线程的,因此我必须将 UDP 套接字的接收缓冲区设置得相当高,以免丢失任何数据包。我已经运行了一段时间的测试,但我从未见过 UDP mem 超过 50。

    【讨论】:

    • 知道什么是“mem”和“alloc”统计数据吗?
    【解决方案2】:

    对不起,如果我在这里完全偏离基地,但我认为您需要先通过 /proc/sys/net/ipv4/udp_mem 打开 udp 记帐,然后它才会收集内存统计信息。

    【讨论】:

    • 本例设置了upd内存节流:cat /proc/sys/net/ipv4/udp_mem 4651584 6202112 9303168
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多