先查看服务器 PAGESIZE 设置
单位是 Byte,查出来是4096
[root@VM-20-7-centos ~]# getconf PAGESIZE
4096
查看 tcp 连接分配的缓冲区内存大小设置
单位是 Byte
cat /proc/sys/net/ipv4/tcp_rmem # TCP套接字的接收缓冲区大小
cat /proc/sys/net/ipv4/tcp_wmem # TCP套接字的发送缓冲区大小
查询结果:
[root@VM-20-7-centos ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456
[root@VM-20-7-centos ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
如上,每个设置都有三个数字,
-
第1个数字是最小值
-
第2个数字是默认值
-
第3个数字是最大值
所以读缓冲区内存大小默认值约为 85KB(87380B=85K),写缓冲区大小的默认值为16KB, 一条TCP连接缓冲区:
最先大小为:4+4=8KB
默认大小为:16 + 85 = 101KB
最大大小为:6144K+4096K=10240K
查看 tcp 连接分配的内存 page 的阈值设置
[root@VM-20-7-centos ~]# cat /proc/sys/net/ipv4/tcp_mem
42501 56671 85002
与缓冲区大小设置类似,也是三个数字,但它们的含义有点不同:
第一个数字表示,当 tcp 使用的 page 数少于 45933 时,kernel 不对其进行任何的干预
第二个数字表示,当 tcp 使用的 page 数超过 61246 时,kernel 会进入 “memory pressure” 压力模式
第三个数字表示,当 tcp 使用的 pages 超过 91866 时(约 358M 内存),就会报:Out of socket memory
查看TCP连接时内存实际使用的page数
[root@VM-20-7-centos ~]# cat /proc/net/sockstat
sockets: used 214
TCP: inuse 22 orphan 0 tw 1 alloc 29 mem 2
UDP: inuse 2 mem 0
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
如上图,mem 后面的 2 表示 page 数,即当前的 TCP连接实际占用内存大小为: 2*4 = 8 KB