TCP参数优化

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内存)

 

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万

net.ipv4.tcp_max_orphans

最大孤儿套接字(orphan sockets)数,单位是个

net.ipv4.tcp_max_orphans = 65536

表示最多65536个

注意:当cat /proc/net/sockstat看到的orphans数量达到net.ipv4.tcp_max_orphans的约一半时,就会报:Out of socket memory

详见kernel源码:

 

   include/net/tcp.h:

 268 static inline bool tcp_too_many_orphans(struct sock *sk, int shift)

 269 {

 270         struct percpu_counter *ocp = sk->sk_prot->orphan_count;

 271         int orphans = percpu_counter_read_positive(ocp);

 272 

 273         if (orphans << shift > sysctl_tcp_max_orphans) {

 274                 orphans = percpu_counter_sum_positive(ocp);

 275                 if (orphans << shift > sysctl_tcp_max_orphans)

 276                         return true;

 277         }

 278 

 279         if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&

 280             atomic_long_read(&tcp_memory_allocated) > sysctl_tcp_mem[2])

 281                 return true;

 282         return false;

 283 }

  参考http://blog.tsunanet.net/2011/03/out-of-socket-memory.html

  对于net.ipv4.tcp_max_orphans = 65536,当orphans达到32768个时,会报Out of socket memory,此时占用内存 32K*64KB=2048MB=2GB

  (每个孤儿socket可占用多达64KB内存),实际可能小一些

net.ipv4.tcp_orphan_retries

孤儿socket废弃前重试的次数,重负载web服务器建议调小

  net.ipv4.tcp_orphan_retries = 1

  设置较小的数值,可以有效降低orphans的数量(net.ipv4.tcp_orphan_retries = 0并不是想像中的不重试)

net.ipv4.tcp_retries2

活动TCP连接重传次数,超过次数视为掉线,放弃连接。缺省值:15,建议设为 2或者3.

net.ipv4.tcp_synack_retries

TCP三次握手的syn/ack阶段,重试次数,缺省5,设为2-3

net.ipv4.tcp_fin_timeout = 30

FIN_WAIT状态的TCP连接的超时时间

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

TIME_WAIT状态的socket快速回收,循环使用

net.ipv4.tcp_max_syn_backlog = 4096

TCP连接SYN队列大小

net.core.netdev_max_backlog = 2048

网络设备的收发包的队列大小

net.ipv4.tcp_syncookies = 1

TCP SYN Cookies,防范DDOS攻击,防止SYN队列被占满

 

参考文献:

http://jaseywang.me/2012/05/09/%E5%85%B3%E4%BA%8E-out-of-socket-memory-%E7%9A%84%E8%A7%A3%E9%87%8A-2/

http://blog.tsunanet.net/2011/03/out-of-socket-memory.html

http://rdc.taobao.com/blog/cs/?p=1062

   
id="iframeu2218926_0" src="http://pos.baidu.com/ecvm?sz=760x90&rdid=2218926&dc=2&di=u2218926&dri=0&dis=0&dai=2&ps=3553x184&coa=at%3D3%26rsi0%3D760%26rsi1%3D90%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1476684666210&ti=%E5%85%B3%E4%BA%8E%E9%AB%98%E8%B4%9F%E8%BD%BD%E6%9C%8D%E5%8A%A1%E5%99%A8Kernel%E7%9A%84TCP%E5%8F%82%E6%95%B0%E4%BC%98%E5%8C%96_zih_39%E5%81%A5%E5%BA%B7%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1349x643&pss=1349x3553&cfv=14&cpl=22&chi=1&cce=true&cec=GBK&tlm=1476655867&rw=643&ltu=http%3A%2F%2Fblog.39.net%2Fzih%2Fa_16200732.html&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dw5SGLsES0ztx8u2M3tM_ymWGy0v1pt3PuuoetUnVUF6VMANas_XBbSirzan1d0J_%26wd%3D%26eqid%3Dde04eb6100008f550000000558046b70&ecd=1&psr=1366x768&par=1366x728&pis=-1x-1&ccd=24&cja=true&cmi=64&col=zh-CN&cdo=-1&tcn=1476684668&qn=4d687144e30b632f&tt=1476684665739.2040.2104.2105" width="760" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; vertical-align: bottom; margin: 0px;">

zih的人气博文

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值