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

关于高负载服务器Kernel的TCP参数优化的更多相关文章

  1. 关于高负载服务器Kernel的ipv4的TCP参数说明及优化

    net.ipv4.tcp_mem 内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看: #getconf PAGESIZE 4096 net.ipv4.t ...

  2. Windows下tcp参数优化

    Windows系统下的TCP参数优化2013-04-25      0 个评论       作者:最初的幸福ever收藏     我要投稿Windows系统下的TCP参数优化 TCP连接的状态与关闭方 ...

  3. Windows系统下的TCP参数优化

    1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态, ...

  4. Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)

    转自:https://blog.csdn.net/libaineu2004/article/details/49054261 Windows系统下的TCP参数优化   TCP连接的状态与关闭方式及其对 ...

  5. DDOS防御----CENTOS 内核TCP参数优化

    0x01 环境 attact作为攻击发起方,安装有hping server作为被攻击方,修改内核TCP参数.使用操作系统CENTOS7 0x02 步骤 一.发起攻击 修改TCP最大SYN连接数 使用a ...

  6. kernel笔记:TCP参数

    http://blog.chinaunix.net/uid-27119491-id-3346430.html 本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层 ...

  7. 实用TCP协议(2):TCP 参数优化

    在了解 TCP 的基本机制后本文继续介绍 Linux 内核提供的链接队列.TW_REUSE.SO_REUSEPORT.SYN_COOKIES 等机制以优化生产环境中遇到的性能问题. 连接队列 Linu ...

  8. Tcp参数优化

    net.core.netdev_max_backlog = 400000 #该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目. net.core.opt ...

  9. CentOS下内核TCP参数优化配置详解

    主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的. TCP/IP的设计者如此设计,主要原 ...

随机推荐

  1. xmpp整理笔记:聊天信息的发送与显示

    任何一个信息的发送都需要关注两个部分,信息的发出,和信息在界面中的显示 往期回顾: xmpp整理笔记:环境的快速配置(附安装包)  http://www.cnblogs.com/dsxniubilit ...

  2. 百度地图SDK 遇到的问题及解决方案

    目前项目工作中用到了百度地图sdk,遇到了不少问题,在此记录一下,顺便吐槽下希望百度能把这地图sdk做的更好用一点. 1,开发环境, Xcode6.0 (6A313) + 百度地图 iOS SDK v ...

  3. spring理解

    Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...

  4. Android 应用程序的反编译

    1.ApkTool工具 安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件.安装环境:需要安装JRE1.61> 到http://code.google.com/p/an ...

  5. ios 图片的两种加载方式

    控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...

  6. IOS 手势详解

    在IOS中手势可以让用户有很好的体验,因此我们有必要去了解一下手势. (在设置手势是有很多值得注意的地方) *是需要设置为Yes的点击无法响应* *要把手势添加到所需点击的View,否则无法响应* 手 ...

  7. C++语言-09-多任务

    概述 概念 计算机同时运行多个程序的能力,多任务处理的方法是:运行第一个程序的一段代码,保存工作环境:再运行第二个程序的一段代码,保存工作环境:--恢复第一个程序的工作环境,执行第一个程序的下一段代码 ...

  8. HTML5设计网页熔岩灯导航(navigation bar)插件 已经加上完整源代码

    导航栏(navigation bar): 1.指位于页眉区域的,在页眉横幅图片上边或下边的一排水平导航按钮,它起着链接博客的各个页面的作用. 2.网页设计中不可缺少的部分,它是指通过一定的技术手段,为 ...

  9. 如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

    客户端js无需任何专门设置,使用通常的ajax调用即可: $.ajax({ url: '跨域URL', type: 'get', dataType: 'json', success: function ...

  10. servlet 学习(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...