WALL-E / tcp-ip-labs

tcp ip labs
2 stars 1 forks source link

TCP队列和缓存 #2

Open WALL-E opened 7 years ago

WALL-E commented 7 years ago

参考 http://blog.39.net/zih/a_16200732.html https://yq.aliyun.com/articles/4252

  1. net.ipv4.tcp_mem

内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看:

#getconf PAGESIZE
4096

net.ipv4.tcp_mem = 196608 262144 393216

第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预

第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式

第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

以上数值适用于4GB内存机器,对于8GB内存机器,建议用以下参数:

net.ipv4.tcp_mem = 524288 699050 1048576 (TCP连接最多约使用4GB内存)

  1. net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem

为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte

net.ipv4.tcp_rmem = 4096 8192 4194304 net.ipv4.tcp_wmem = 4096 8192 4194304

第一个数字表示,为TCP连接分配的最小内存

第二个数字表示,为TCP连接分配的缺省内存

第三个数字表示,为TCP连接分配的最大内存

一般按照缺省值分配,上面的例子就是读写均为8KB,共16KB

1.6GB TCP内存能容纳的连接数,约为 1600MB/16KB = 100K = 10万

4.0GB TCP内存能容纳的连接数,约为 4000MB/16KB = 250K = 25万

  1. net.ipv4.tcp_moderate_rcvbuf = 1

当net.ipv4.tcp_moderate_rcvbuf设置为1时,自动调节机制生效,每个TCP连接的recvBuffer由下面的3元数组指定。 当net.ipv4.tcp_moderate_rcvbuf被设置为0,或者设置了socket选项SO_RCVBUF,缓冲的动态调节机制被关闭。