首页 > 代码库 > LINUX内核参数网络相关

LINUX内核参数网络相关

有助于提高网络性能和吞吐量的参数

net.core.somaxconn = 128已完成连接队列(completed connection queue)(1)三次握手已经完成,但还未被应用层接收(accept),但也处于ESTABLISHED状态.(2)队列长度由listen的backlog参数和内核的 net.core.somaxconn 参数共同决定.(3)当这个队列满了之后,不管未完成连接队列是否已满,是否启用syncookie,都不在接收新的SYN请求.(该特性跟内核版本有关)(4)如果client端向已完成连接队列的socket发送包,内核将保存数据到socket的接收缓冲区,等应用层accept之后,传给应用层.(5)对于高并发服务器建议设置为8192,甚至更大net.ipv4.tcp_max_syn_backlog = 512未完成连接队列(incomplete connection queue)(1)半连接状态,处于SEND_RCVD状态.(2)由内核参数 net.ipv4.tcp_max_syn_backlog 设置.(3)如果启用了syncookie,在未完成连接队列满了之后,新的SYN请求将使用syncookie机制.(5)对于高并发服务器建议设置为8192,甚至更大net.ipv4.tcp_syn_retries = 5表示的是3次握手过程中第1个步骤syn的最大发送次数,默认值是5net.ipv4.tcp_synack_retries = 5表示的是3次握手中第2个步骤syn-ack的最大发送次数,默认值为5net.ipv4.tcp_retries1 = 3放弃回应一个TCP连接请求前﹐需要进行多少次重试.RFC 规定最低的数值是3﹐这也是默认值﹐根据RTO的值大约在3秒 - 8分钟之间.(注意:这个值同时还决定进入的syn连接)net.ipv4.tcp_retries2 = 15在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试.默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)net.ipv4.tcp_orphan_retries = 0在近端丢弃TCP连接之前﹐要进行多少次重试.默认值是7个﹐相当于 50秒 - 16分钟﹐视 RTO 而定.如果您的系统是负载很大的WEB服务器﹐那么也许需要降低该值﹐这类 sockets 可能会耗费大量的资源.另外参的考 tcp_max_orphans .(事实上做NAT的时候,降低该值也是好处显着的,我本人的网络环境中降低该值为3)net.ipv4.tcp_abort_on_overflow = 0当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false.这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态.只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用.(对待已经满载的sendmail,apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)net.ipv4.tcp_max_orphans = 65536系统所能处理不属于任何进程的TCP sockets最大数量.假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息.之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)net.core.wmem_max = 229376最大socket写buffer,可参考的优化值:873200net.core.rmem_max = 229376最大socket读buffer,可参考的优化值:873200net.core.wmem_default = 229376net.core.rmem_default = 229376net.core.optmem_max = 20480socket buffer的最大初始化值net.ipv4.tcp_mem = 89376        119168  178752同样有3个值,意思是: net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力. net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段. net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket. 上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864net.ipv4.tcp_wmem = 4096        16384   3813376net.ipv4.tcp_rmem = 4096        87380   3813376net.ipv4.udp_mem = 89376        119168  178752net.ipv4.udp_rmem_min = 4096net.ipv4.udp_wmem_min = 4096net.core.netdev_max_backlog = 1000进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000

 

对于改善TIME_WAIT状态太多有益的参数

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。net.ipv4.ip_local_port_range = 32768    61000指定端口范围的一个配置,默认是32768 61000,可调整到1024 61000net.ipv4.tcp_max_tw_buckets = 18000系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要人为的降低这个限制﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。(事实上做NAT的时候最好可以适当地增加该值)net.ipv4.tcp_timestamps = 1TCP有一种行为,可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存的时间戳,即视为无效,相应的数据包会被丢弃。如果服务器身处NAT环境,安全起见,通常要禁止tcp_tw_recycle,至于TIME_WAIT连接过多的问题,可以通过激活tcp_tw_reuse来缓解。net.ipv4.tcp_fin_timeout = 60表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

 

对于改善CLOSE_WAIT状态太多有益的参数

TCP KeepAlive有关.默认值是: net.ipv4.tcp_keepalive_time = 7200net.ipv4.tcp_keepalive_probes = 9net.ipv4.tcp_keepalive_intvl = 75意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到: net.ipv4.tcp_keepalive_time = 1800net.ipv4.tcp_keepalive_probes = 3net.ipv4.tcp_keepalive_intvl = 30

 

开启LINUX路由功能

net.ipv4.ip_forward = 1设置为1 是linux可以作为路由器

 

LINUX内核参数网络相关