现在,我们的系统通过/proc/net/sockstat
查找hang和tcp mem越来越大。当挂起时,将打印:
“tcp:太多的孤立套接字”
从sockstat
开始,我们知道套接字很少,但消耗1500页内存,为什么?
所以我有两个问题:
(1)
~ # cat /proc/net/sockstat
套接字:使用56
TCP:inuse 6 orphan 0 tw 1 alloc 8 mem 1510
UDP:inuse 8 mem 6
UDPLITE:inuse 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
答案 0 :(得分:0)
对于#1,套接字的内存消耗是
的总和(this post与此相关)
对于/proc/net/sockstat
的示例输出,套接字的数量很小,因此请检查其发送/接收队列的大小。您可以使用netstat -tanp
或ss -tp
等命令执行此操作。请记住,发送和接收缓冲区大小显示为例如ss -m
是最大值(受tcp_rmem
和`tcp_wmem约束),而不是当前分配的值。
对于#2,this post解释了"过多的孤儿套接字"是由于孤儿的数量增加超过/proc/sys/net/ipv4/tcp_max_orphans
中的值,尽管某些类型的"坏"套接字比其他套接字更受惩罚,因此即使你比限制条件低2倍或4倍,你也可能会遇到错误。